2014-02-07 2 views
0

Jaudiotagger 라이브러리를 사용하여 Java 클래스를 만들었지 만 문제없이 실행됩니다. 나는 그때부터 항아리를 만들었고 NoClassDefFoundError를 얻었다. 여기에 그 방법이있다 :Jaudiotagger가있는 Jar 파일, NoClassDefFoundError

주 클래스 id3tag.java와 라이브러리 jaudiotagger-2.0.3.jar를 폴더에 넣고 명령 행을 사용하여 컴파일했다. 이 프로그램은 문제없이 원활하게 실행되었습니다.

javac -cp .;jaudiotagger-2.0.3.jar id3tag.java 
java -cp .;jaudiotagger-2.0.3.jar id3tag 

그런 다음 매니페스트와 jar 파일을 만들었습니다.

echo Main-Class: id3tag >manifest.txt 
jar cvfm id3tag.jar manifest.txt id3tag.class jaudiotagger-2.0.3.jar 

나는 다음과 같은 출력이있어 :

added manifest 
adding: id3tag.class(in = 5952) (out= 2997)(deflated 49%) 
adding: jaudiotagger-2.0.3.jar(in = 811441) (out= 740599)(deflated 8%) 

내가 다음 jar 파일을 실행, 그리고 "A 자바 예외가 발생했습니다."있어요. 나는 또한 시도 :

java -jar id3tag.jar 

그리고 출력을 가지고 :

Exception in thread "main" java.lang.NoClassDefFoundError: org/jaudiotagger/tag/ 
FieldDataInvalidException 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Class.java:2451) 
     at java.lang.Class.getMethod0(Class.java:2694) 
     at java.lang.Class.getMethod(Class.java:1622) 
     at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) 

Caused by: java.lang.ClassNotFoundException: org.jaudiotagger.tag.FieldDataInval 
idException 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     ... 6 more 

내가 다음 예외로 Jaudiotagger에서 사용되는 모든 오류 클래스 (모두)를 교체하고 항아리를 재현. 이제 다른 모든 jar 파일을 (Java (TM) Platform SE 바이너리를 사용하거나 명령 프롬프트에 id3tag.jar을 작성하여) 실행할 때와 동일한 결과가 발생합니다. 그러나 java -jar가 작동하고 런타임 오류가 발생했습니다.

Exception in thread "main" java.lang.NoClassDefFoundError: org/jaudiotagger/audi 
o/AudioFileIO 
     at id3tag.tagSong(id3tag.java:112) 
     at id3tag.tagAlbum(id3tag.java:82) 
     at id3tag.tagArtist(id3tag.java:40) 
     at id3tag.main(id3tag.java:170) 
Caused by: java.lang.ClassNotFoundException: org.jaudiotagger.audio.AudioFileIO 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     ... 4 more 

전체 라이브러리가 저를 위해 똥을 내지 않는 것처럼 보입니다. 이 문제를 어떻게 해결할 수 있으며 java -jar없이 jar 파일을 실행하려면 어떻게해야합니까? ("x more"라고 말하는 것보다 사람이 필요로하는 경우 전체 pile'o'errors를 얻으려면 어떻게해야합니까?)

저는이 종류의 똥에 대해 잘 알지 못합니다. 대답은 더 좋다. 감사.

저는 윈도우 8과 최신 자바 (1.7.0_17)입니다.

+0

메모 만 들어 있습니다. 최신 자바 릴리스가 아닙니다. –

+0

이상합니다. 여러 번 설치했는데 웹 사이트에서 최신 버전을 가지고 있고 설치 프로그램의 이름은 chromeinstall-7u51.exe이지만 java -version을 입력하면 1.7.0_17이됩니다. – Blrp

+1

Java 버전에서 클래스 경로가 잘못 설정된 경우 문제가 발생하지 않습니다. –

답변

0

jaudiotagger의 org 폴더를 실제 .jar 파일 대신 내 .jar에 포함하여 작업했습니다. 그런 다음 .jar 파일을 직접 실행하는 대신 .bat 파일을 사용하여 실행했습니다. 더 나은 해결책을 찾으면 자유롭게 답을 추가해 주시면 다시 확인하겠습니다.

나는 jaudiotagger-2.0.3을 추출했습니다.jar 파일을 winrar와 함께 사용하여 org 폴더가 내 메인 클래스와 같은 폴더에 있었는지 확인하십시오. 그럼 컴파일 할 수 있고 것만으로 메인 클래스를 실행

javac id3tag.java 
java id3tag 

난 후 이전과 매니페스트 파일 같은 방법으로 만들어지고 항아리 생성 :

jar cvfm id3tag.jar manifest.txt id3tag.class org 

JAR 파일은 자바와 함께 일을 - jar id3tag.jar하지만 단순히 id3tag.jar을 작성하는 것은 아무 것도하지 않았습니다. JAR 파일은 기본적으로 javaw.exe 파일에 의해 실행되기 때문에 jar 파일을 마우스 오른쪽 버튼으로 클릭하고 -> 열려면 -> 기본 프로그램을 선택하고 java 폴더의 java.exe 파일로 이동하십시오 (검색 만하면됩니다). 폴더). .jar를 실행하면 "오류 : 기본 클래스 경로 \ id3tag.jar을 찾거나로드 할 수 없습니다"가 표시됩니다. 나는이 .bat 파일을 사용하여이 문제를 해결했다. 나는 메모장에

java -jar path\id3tag.jar 

을 입력하고 whatevername.bat (모든 파일 형식으로 저장)로 저장했습니다.

.jar 파일을 제대로 작동시키기위한 새로운 질문을 만들었습니다. .jar error - could not find or load main class을 참조하십시오.

0

이것은 메인 클래스가 없다는 것을 알려주고 있습니다. 거의 모든 비 웹 기반 프로그래밍 언어에서 모든 프로그램이 시작하려면 메인 클래스가 있어야 할 수도 있기 때문입니다. 메시지는이 클래스가 더 이상이 없음을 알리는됩니다

자바에서는이

공공 정적 INT 메인 (문자열 []에 args)처럼 보인다 {

가},이 컴파일러 오류가있을 수 또는 완전히 다른 것.

라이브러리를 다시 다운로드하고 Java ee 개발자를 위해 Eclipse IDE를 다운로드하십시오. 이 IDE에는 컴파일러가 내장되어있어 때때로 명령 줄보다 잘 작동합니다.

도움이 되었기를 바랍니다.

관련 문제