2011-11-13 46 views
3

希望我的問題是不是太傻,但我有以下問題......Android的異常:「java.lang.NoClassDefFoundError:javax.jmdns.JmDNS」

我輸入一個罐子含有將圖書館JmDNS納入我的項目。我的項目設置來處理這樣JmDNS ...

 setUp(); 
     try { 
      peer = new PublicPeer("Aidan",6666,6667,this); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    private void setUp(){ 
     android.net.wifi.WifiManager wifi = 
       (android.net.wifi.WifiManager) 
        getSystemService(android.content.Context.WIFI_SERVICE); 
     lock = wifi.createMulticastLock("Lock"); 
      lock.setReferenceCounted(true); 
      lock.acquire(); 
     } 

其中lock = android.net.wifi.WifiManager.MulticastLock lock;PublicPeer peer;

當執行到peer = new PublicPeer("Aidan",6666,6667,this);以下錯誤輸出...

11-13 13:12:47.644: W/dalvikvm(204): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
11-13 13:12:47.644: E/AndroidRuntime(204): Uncaught handler: thread main exiting due to uncaught exception 
11-13 13:12:47.664: E/AndroidRuntime(204): java.lang.NoClassDefFoundError: javax.jmdns.JmDNS 
11-13 13:12:47.664: E/AndroidRuntime(204):  at com.daniel.business.publicchat.PeerAdvertiser.<init>(PeerAdvertiser.java:36) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at com.daniel.business.publicchat.PublicPeer.<init>(PublicPeer.java:60) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at com.chatr.org.PublicChat.onCreate(PublicChat.java:21) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at android.os.Looper.loop(Looper.java:123) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at java.lang.reflect.Method.invoke(Method.java:521) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
11-13 13:12:47.664: E/AndroidRuntime(204):  at dalvik.system.NativeStart.main(Native Method) 

如果我的理解上面是正確的,它有問題找到我的JmDNS庫,但是,它被添加。我100%確定它。其中我進口JAR的代碼可以在這裏找到:https://github.com/Ps2Fino/DSProject-Backend

編輯

這似乎是被添加到Android JmDNS一個問題,因爲這裏記載:http://home.heeere.com/tech-androidjmdns.html我已經嘗試下面該指南爲了「重新」JmDNS JAR文件,但我仍然有同樣的問題。它似乎並沒有很好地運作。

+0

我假設你已經將.jar添加到Eclipse的構建路徑中了嗎? – Kerry

+0

你的理解是不正確的。搜索「NoClassDefFoundError」。 –

+0

@Kerubu是的,我是。包含jmDNS jar的jar被添加到類路徑中。我也試圖自己製作JAR,並將其添加到jmDNS jar的類路徑中,並試圖從正在添加的jar中手動添加jmDNS jar,但是引發了一個錯誤,聲明jar(jmDNS是一個)正在被添加兩次。 – Aidanc

回答

3

我認爲JmDNS開發商可能有關於發佈/維持其釋放,更糟的是窮人記錄了一些問題,你可以下載來自SourceForge home pageMaven central repo罐子,但是,你可以看到同一版本的jar文件(最新版本是3.4.1)是不同的,Maven中央存儲庫的jar文件更乾淨,可能這是Heeere在他的關於rejaring的頁面中談到的。我總是使用Maven構建我的Android應用程序,因此從未嘗試過SourceForge中的那個,但是,從Maven下載的jar文件適用於我。

+0

剛剛試過這個,它似乎在它自己的工作,但沒有與我正在實施的圖書館..嗯..有趣.. – Aidanc

+0

什麼是錯誤?我也在我的圖書館項目中使用它,並沒有任何問題。 – yorkw

+0

@Aidanc,給maven-assembly-plugin的「單個」目標一個鏡頭......這樣你就可以確信每個類都在類路徑中(因爲你只有一個jar文件) –

1

這可能是因爲班級尚未加載而發生的。 Class clazz = getClassLoader()。loadClass(「javax.jmdns.JmDNS」); 然後使用反射來創建類型clazz中的對象的實例

+0

調用時會拋出相同的錯誤。 – Aidanc

0

您可以繞過添加jar文件的一種方法是從JmDNS.jar文件獲取源代碼並將其直接添加到您的項目中。我遇到類似於你的問題,我無法讓我的Android應用程序正確使用來自SourceForge或Maven的JmDNS.jar文件。我只是從jar文件中提取所有源文件,將它們添加到我的Eclipse項目中,然後構建它,它就像一個魅力一樣。

我不知道這是否會是您想使用的長期解決方案,但此解決方案適用於我。