首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jar文件与Jaudiotagger,NoClassDefFoundError

Jar文件与Jaudiotagger,NoClassDefFoundError
EN

Stack Overflow用户
提问于 2014-02-07 02:12:43
回答 2查看 384关注 0票数 0

我使用Jaudiotagger库创建了一个java类,它运行时没有问题。然后我用它做了一个罐子,我得到了NoClassDefFoundError。事情是这样进行的:

我将主类id3tag.java和库jaudiotagger 2.0.3.jar放在一个文件夹中,并使用命令行进行编译。节目顺利进行,没有问题。

代码语言:javascript
复制
javac -cp .;jaudiotagger-2.0.3.jar id3tag.java
java -cp .;jaudiotagger-2.0.3.jar id3tag

然后我创建了清单和jar文件。

代码语言:javascript
复制
echo Main-Class: id3tag >manifest.txt
jar cvfm id3tag.jar manifest.txt id3tag.class jaudiotagger-2.0.3.jar

我得到了以下输出:

代码语言:javascript
复制
added manifest
adding: id3tag.class(in = 5952) (out= 2997)(deflated 49%)
adding: jaudiotagger-2.0.3.jar(in = 811441) (out= 740599)(deflated 8%)

然后运行jar文件,得到“发生了Java异常”。我也试过:

代码语言:javascript
复制
java -jar id3tag.jar

我得到了输出:

代码语言:javascript
复制
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

然后,我用异常替换了所有(这两个)错误类,并重新创建了jar。现在,当我运行其他所有jar文件(使用Java(TM)平台SE二进制文件,或者通过在命令提示符中编写id3tag.jar )时,也会发生同样的事情--什么都没有。然而,java -jar起作用,给了我一个运行时错误。

代码语言:javascript
复制
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文件?(此外,如果有人需要,我如何得到完整的“o”错误,而不是仅仅让它说"x更多“?)

我对这类东西不太了解,所以答案越具体越好。谢谢。

我使用的是windows 8和最新的java (1.7.0_17)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-08 22:40:13

为此,我在我的.jar中包含了jaudiotagger中的org文件夹,而不是实际的.jar文件,然后我使用了一个.bat文件来运行它,而不是直接运行.jar。如果您找到了更好的解决方案,可以随意添加您自己的答案,我会检查的。

我使用winrar解压jaudiotagger 2.0.3.jar,以便org文件夹与我的主类位于同一个文件夹中。然后,我可以编译并运行主类,只需:

代码语言:javascript
复制
javac id3tag.java
java id3tag

然后,我以与前面相同的方式创建了清单文件,并创建了jar:

代码语言:javascript
复制
jar cvfm id3tag.jar manifest.txt id3tag.class org

jar文件与java -jar id3tag.jar一起工作,但是简单地编写id3tag.jar仍然什么也做不了。原来这是因为jar文件默认由javaw.exe文件运行,所以您必须右键单击->打开的jar文件,选择默认程序,然后导航到java文件夹中的java.exe文件(只需搜索文件夹)。然后运行.jar将获得"Error:未能找到或加载主类path\id3tag.jar“。我使用了一个.bat文件来解决这个问题。我进去了

代码语言:javascript
复制
java -jar path\id3tag.jar

放入记事本并保存为whatevername.bat (另存为类型:所有文件)。

为了使.jar文件正常工作,我创建了一个新的问题。见.jar error - could not find or load main class

票数 0
EN

Stack Overflow用户

发布于 2014-02-07 02:25:20

这是告诉您,您没有主类,因为您可能已经或者可能不知道几乎所有非基于web的编程语言中的所有程序都必须有一个主类来开始。在java中,它看起来如下所示

公共静态int main(String[] args){

}

消息是通知您这个类不再存在,这可能是编译器错误或完全不同的东西。

请再次下载库,并为java ee开发人员下载eclipse。这个ide有一个内置编译器,有时比命令行工作得更好。

希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21618009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档