简单.jar文件中的NoClassDefFoundError错误

3
我正在尝试创建一个简单的.jar文件。该项目由两个.class文件组成——主类使用辅助类生成GUI。主类是实际的“主”类,运行时次要类只是一个带有其方法的类文件,并且它也是JFrame的扩展,导入javax.swing和java.awt.event.*。我使用Jar将所有内容打包。我添加了一个清单文件(带有换行符),该清单文件指向具有主方法的主文件。因此,Jar文件具有两个.class文件和一个包含manifest.txt的文件夹。当我使用javaw.exe运行它时,什么都不会发生。所以我尝试在命令行中运行它,结果出现了关于辅助类的NoClassDefFroundError错误。我注意到,当我尝试在JCreator中编译和运行第二个类时,我会得到相同类型的错误——难怪,它没有主方法,它只是一个类文件。当我从JCreator运行主文件时,一切正常。有任何想法吗?

第二个类(没有主方法)正在使用JFrame。 - Protagonist
如果您的类被定义为属于一个包,那么相应目录下的条目可能没有在JAR文件中。 - Ernest Friedman-Hill
2
请展示运行jar tvf foo.jar的结果,并附上精确的错误信息。 - Jon Skeet
1
堆栈跟踪很重要,正如Jon Skeet所指出的那样。 NoDefClassFoundError并不一定意味着应用程序正在抛出ClassNotFoundException,可能在初始化类时出现了故障。 - John Vint
@Protagonist 栈跟踪看起来是什么样子的?如果你将栈跟踪复制并粘贴到你的问题中,那会很有帮助。 - John Vint
显示剩余3条评论
2个回答

3

看到您的堆栈跟踪,我现在能够看出问题所在:我可以告诉您实际上有超过两个类:

Caused by: java.lang.ClassNotFoundException: grafPrime$calcButton at 

有一个名为grafPrime$calcButton.class的文件,它也需要在jar文件中。可能还有其他类似的文件-请确保全部包含!


是的,就是这样。我太蠢了,但至少它能正常工作。谢谢! - Protagonist

2

好的,问题是你没有包含匿名类 - 你应该有一个叫做 grafPrime$calcButton.class 的文件,并且它没有在你的jar文件中。

基本上,将你的代码编译到一个干净的目录中,并包含所生成的所有类文件。


好的,我搞定了。我想感谢你们所有人,因为你们帮助我找到了正确的解决方案。问题是我缺少grafPrime$calcButton.class和其他几个类文件。我通过重新编译次要的类文件来解决它,然后创建了3-4个实际的类文件。再次感谢! - Protagonist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接