2011-11-13 3 views
3

잘하면 내 문제가 너무 바보하지만 다음과 같은 문제가 있어요 ... 포함되지 도서관 JmDNS 내 프로젝트에. 경우 나의 프로젝트는 ... 이런 JmDNS를 처리 할 수 ​​안드로이드 예외 : 나는 항아리를 가져있어</p> <p>: 'java.lang.NoClassDefFoundError가 javax.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 안드로이드에 추가로 문제가 될 것으로 보인다

: http://home.heeere.com/tech-androidjmdns.html 내가 그 가이드 다음 시도했습니다 JmDNS JAR 파일을 "재 jaring"하기위한 것이지만 여전히 동일한 문제가 있습니다. 그것으로 잘 작동하지 않는 것 같습니다.

+0

Eclipse에서 빌드 경로에 .jar를 추가했다고 가정합니다. – Kerry

+0

이해가 잘못되었습니다. "NoClassDefFoundError"를 검색하십시오. –

+0

@Kerubu 그렇습니다. jmDNS jar를 포함하는 jar가 클래스 경로에 추가됩니다. 나 또한 JAR을 직접 만들고 jmDNS jar 파일을 클래스 경로에 추가하려고 시도했다. jmDNS jar 파일을 jar 파일에서 제거하고 수동으로 추가하려고 시도했지만 jar (jmDNS 중 하나) 오류가 발생한다.)가 두 번 추가됩니다. – Aidanc

답변

3

나는 JmDNS 개발자가 자신의 자료와 가난한 설명되어 더 악화 무엇을 게시/유지에 관한 몇 가지 문제가있을 수 있습니다 생각, 당신은 모두 SourceForge home pageMaven central repo에서 항아리를 다운로드 할 수 있습니다 형 clazz에의 객체의 인스턴스를 만들 반사를 사용 , 동일한 릴리스 (최신 버전은 3.4.1)의 jar 파일이 다르다는 것을 알 수 있습니다. Maven 중앙 저장소의 파일이 더 깨끗합니다. 아마도 Heeere가 rejaring에 대한 그의 페이지에서 말한 내용 일 것입니다. 나는 항상 Maven을 사용하여 Android 애플리케이션을 빌드하므로 SourceForge에서이 애플리케이션을 사용해 본 적이 없지만 Maven에서 다운로드 한 jar 파일은 저에게 적합합니다.

+0

방금 ​​시도했는데, 그 라이브러리가 자신의 라이브러리에서는 작동하지 않는 것 같습니다. 흠 .. 흥미 롭습니다. – Aidanc

+0

무엇이 오류입니까? 나는 또한 그것을 나의 도서관 프로젝트에서 사용하고 아무런 문제가 없다. – yorkw

+0

@Aidanc, maven-assembly-plugin의 "single"목표를 제공하십시오. 모든 클래스가 클래스 패스에 있음을 확신 할 수 있도록 (하나의 jar 파일 만 있기 때문에) –

1

클래스가 아직로드되지 않았기 때문에 상황이 발생할 수 있습니다. clazz = getClassLoader(). loadClass ("javax.jmdns.JmDNS"); 그런 다음 그러나,

+0

동일한 오류가 발생합니다. – Aidanc

0

jar 파일을 추가하는 방법 중 하나는 JmDNS.jar 파일의 소스 코드를 프로젝트에 직접 추가하는 것입니다. 내가 Android 나 Maven의 JmDNS.jar 파일로 제대로 작동하도록 안드로이드 애플리케이션을 얻을 수없는 것과 비슷한 문제가있었습니다. 방금 jar 파일에서 모든 소스 파일을 가져 와서 내 Eclipse 프로젝트에 추가하고 빌드하고 매력적으로 작동합니다.

이것이 장기적인 솔루션이 될지 모르지만이 솔루션이 저에게 효과적이었습니다.