安卓例外:'java.lang.NoClassDefFoundError: javax.jmdns.JmDNS'



希望我的问题不是太愚蠢,但我有以下问题…

我正在导入一个包含库JmDNS的jar到我的项目中。我的项目设置像这样处理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库,但是,它正在被添加。我百分百确定。我要导入的JAR代码可以在这里找到:https://github.com/Ps2Fino/DSProject-Backend

编辑

这似乎是一个问题与JmDNS被添加到Android记录在这里:http://home.heeere.com/tech-androidjmdns.html我已经尝试按照该指南"重新JAR"JmDNS JAR文件,但我仍然有同样的问题。它看起来不太好用

我认为JmDNS开发人员可能有一些关于发布/维护他们的版本的问题,更糟糕的是文档很差,你可以从SourceForge主页和Maven中央仓库下载jar文件,但是,你可以看到相同版本(最新版本是3.4.1)的jar文件是不同的,Maven中央仓库的jar文件更干净,可能这就是Heeere在他的页面中谈到的重新发布。我总是使用Maven构建我的Android应用程序,所以从来没有尝试过从SourceForge的一个,然而,从Maven下载的jar文件为我工作。

这可能发生在类尚未加载时。classazz = getClassLoader().loadClass("javax.jmdn .jmdns ");然后使用反射来创建类型为

的对象实例。

添加jar文件的一种方法是从JmDNS.jar文件中获取源代码,并将其直接添加到项目中。我遇到了一个类似于你的问题,我无法让我的Android应用程序与SourceForge或Maven的jmdn .jar文件正常工作。我只是从jar文件中取出所有的源文件,将它们添加到我的Eclipse项目中,然后构建它,它就像魔法一样工作了。

我不知道这是否是你想要使用的长期解决方案,但这个解决方案对我来说很有效。

最新更新