为什么会出现“Exception in thread "main" java.lang.NoClassDefFoundError”错误?

7

我通过Eclipse运行我的软件。昨天一切都很好。我没有更改代码,但今天当我再次尝试运行它时,出现了以下错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: coloredtrails/CTListener
    at test.DemoPlayer1.createAndShowGUI(DemoPlayer1.java:23)
    at test.DemoPlayer1.main(DemoPlayer1.java:39)
Caused by: java.lang.ClassNotFoundException: coloredtrails.CTListener
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 2 more

为什么它看不到这个类?可能的原因是什么?我该如何解决这个问题?


9
你尝试过清理并重新构建你的项目吗? - Harry Joy
1
@Harry Joy,感谢您的建议!您“救了我的命”! :) 现在它可以工作了。它在接近截止日期时停止工作真是太烦人了。现在它可以工作了! - Roman
3
这是一个很好的例子,说明为什么不要使用Eclipse... - Jonathan
1
通常这是由于Eclipse已知问题行为引起的,而不是JVM本身。1)确保在Eclipse的运行/调试配置中,在“主资源”下使用对象的完全限定包名称(x.y.z.MyClass)。2)尝试使用Eclipse的“构建所有”而不是“构建项目”。3)然后才开始检查您的类路径、目录等。 - smci
2个回答

10

一个NoClassDefFoundError(几乎总是)意味着你的类路径错误。确保你的类路径包括coloredtrails包的基本目录。(当然,还要确保文件coloredtrails\CTListener.class实际存在)。

在命令行中运行:

您可以通过设置CLASSPATH环境变量或在运行程序时在命令行上使用-cp-classpath选项来设置类路径。例如:

java -cp C:\MyProject\classes coloredtrails.CTListener

编辑 - 查看堆栈跟踪并在其中看到URLClassLoader,让我想到您正在尝试运行Java小程序。要了解如何正确部署小程序,以便可以找到小程序所需的所有类,请参阅此教程:部署小程序


我尝试了这个和许多其他的替代方案,但都没有奏效。仅仅删除工作区对我有效。 - Rudolf Real

6
有时候,我的Eclipse(在MacOSX上的Indigo版本)会出现这种情况,特别是当我直接对项目结构进行更改(删除文件、移动它们等)。基本上,Eclipse找不到源文件夹了,所以它不会编译源代码,但仍然尝试运行它(所有这些都没有警告或者引用问题)。为了解决这个问题,需要从构建路径中删除源文件夹(在包资源管理器中右键单击项目下的src文件夹,然后选择“Build-path->Remove from Build-path”)。然后再次添加它(在包资源管理器中右键单击项目下的文件夹,然后选择“Add to build-path”)。这将使src文件夹对编译器再次“可见”,并解决了问题。

或者在Eclipse中刷新所有文件(在项目的根文件夹上按F5快捷键)。 - V G
我在Mavericks上也遇到了同样的问题。我只能通过删除工作区来解决它。 - Rudolf Real
还尝试重新添加src文件夹,但没有成功。创建一个新的工作空间解决了问题。 - IndrekV

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