Исключение Android: 'java.lang.NoClassDefFoundError: javax.jmdns.JmDNS' - PullRequest
3 голосов
/ 13 ноября 2011

Надеюсь, моя проблема не слишком глупая, но у меня возникла следующая проблема ...

Я импортирую флягу, которая содержит библиотеку 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

РЕДАКТИРОВАТЬ

Кажется, это проблема с добавлением JmDNS в Android, как описаноздесь: http://home.heeere.com/tech-androidjmdns.html Я пытался следовать этому руководству для повторного использования JAR-файла JmDNS, но у меня все еще остается та же проблема.Похоже, он не очень хорошо с этим работает.

Ответы [ 3 ]

3 голосов
/ 16 ноября 2011

Я думаю, что у разработчиков JmDNS могут быть некоторые проблемы, связанные с публикацией / поддержанием их релиза, и что еще хуже, плохо документировано, вы можете скачать jar как с домашней страницы SourceForge , так и центрального репозитория Maven однако вы можете видеть, что jar-файл для одного и того же выпуска (последняя версия 3.4.1) отличается, файл из центрального репозитория Maven более чистый, вероятно, именно об этом Хиир говорил на своей странице о повторном использовании. Я всегда использую Maven для создания своего Android-приложения и поэтому никогда не пробовал его из SourceForge, однако, jar-файл, загруженный из Maven, работает для меня.

1 голос
/ 13 ноября 2011

Это может происходить, поскольку класс еще не загружен.Класс clazz = getClassLoader (). LoadClass ("javax.jmdns.JmDNS");Затем используйте рефлексию для создания экземпляра объекта типа clazz

0 голосов
/ 02 апреля 2012

Один из способов добавления файла jar - взять исходный код из файла JmDNS.jar и добавить его непосредственно в проект.У меня возникла проблема, похожая на вашу, из-за которой я не мог заставить свое приложение Android правильно работать с файлом JmDNS.jar из SourceForge или Maven.Я просто взял все исходные файлы из jar-файла, добавил их в свой проект Eclipse, собрал его, и он работает как шарм.

Я не знаю, будет ли это долгосрочным решением, которое выхотел бы использовать, но это решение работало для меня.

...