我在Eclipse中的Java项目运行顺利,直到今天下午我更新了一些文件(包括一个ant build.xml文件)。构建项目时,出现以下错误:
java.lang.NoClassDefFoundError: proj/absa/FrontEnd/ApplicationStarter
Caused by: java.lang.ClassNotFoundException: proj.absa.FrontEnd.ApplicationStarter
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)
Exception in thread "main"
有没有人知道问题所在?
答案 0 :(得分:38)
在Eclipse中执行项目 - > Clean ...为我解决了这个问题。
答案 1 :(得分:9)
java.lang.ClassNotFoundException表示CLASSPATH问题。没有线索意味着你假设CLASSPATH设置正确,但事实并非如此。
如果您使用Eclipse构建,请确保已编译的.class文件所在的目录位于CLASSPATH中,并且其中包含必要的.class文件。
如果您使用Ant构建,请确保在build.xml中看到类似的内容:
<path id="production.class.path">
<pathelement location="${production.classes}"/>
<pathelement location="${production.resources}"/>
<fileset dir="${production.lib}">
<include name="**/*.jar"/>
<exclude name="**/junit*.jar"/>
<exclude name="**/*test*.jar"/>
</fileset>
</path>
更新:您的PATH中没有JAVA_HOME / bin,或者您下载了JRE而不是JDK。检查安装Java的目录,查看/ bin目录中是否包含javac.exe。如果您没有/ bin,请下载JDK并进行安装。
如果你有一个带有javac.exe的/ bin,请检查你的PATH以查看Java / bin目录是否在PATH中。设置完成后,打开命令shell并输入“javac -version”以确保一切顺利。
你告诉Eclipse使用什么JDK?
答案 2 :(得分:4)
如上所述,“java.lang.ClassNotFoundException意味着CLASSPATH问题。”
在我的设置中,我正在运行Maven来构建(而不是Ant)并使用Eclipse(而不是Netbeans)。
通常,为了构建和设置项目,我将从Windows命令提示符运行'mvn clean','mvn compile','mvn eclipse:eclipse'。最后一个命令'mvn eclipse:eclipse'更新项目配置,创建.classpath和.project文件。
为了解决这个问题,我删除了两个文件(.classpath和.project),然后重新运行了三个命令。
因此,根据您的配置,尝试查找类路径/项目文件(进行备份)并删除它们。您还可以尝试删除目标/发布/构建文件夹(无论是从构建命令创建的内容)。然后尝试再次构建/打包/配置项目。
答案 3 :(得分:2)
我认为我的问题及其解决方案可能有所帮助。所以我在我的eclipse项目中得到了同样的错误。在我的项目中,我有几个jar文件,并且在jar文件中抛出了NOCLASSDEFERROR文件。
我的库文件是我的项目heirarchy中文件夹名称“lib”的一部分。我将我的文件夹名称更改为“libs”,并且它有效。
(我查看了.classpath文件,我有键值对,我的jar文件的条目有名为“lib”的键,因此我认为可能从lib更改可能有帮助。)
答案 4 :(得分:1)
我最近经常看到这一点。就在今天,我遇到了与受影响(红色标记)类相同的包中的类的问题!
退出eclipse并重新启动通常可以解决受影响类的红旗问题,但有时会在项目上留下红旗,然后我还需要关闭项目并重新打开它以摆脱独立的红旗。在项目中看到一个红色标志看起来很奇怪,任何子目录都没有红色标志。
使用maven项目群集,我在重新启动eclipse后关闭并打开群集中的所有项目。
答案 5 :(得分:1)
这似乎是一个常见的错误。解决方案是:
希望这在某些情况下有所帮助。
答案 6 :(得分:1)
虽然这是一个疯狂的猜测,可能不适用于您的具体情况,但这可能会让我节省一个小时左右。
如果您已将普通项目“转换”为Java项目(通过编辑.project文件并添加适当的标记),请确保您还具有正确的指定 - 即使Eclipse尝试和没有建设者(成功!):
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
答案 7 :(得分:1)
我也面临同样的问题。然后发现类路径中的lib文件夹的路径未正确设置。
答案 8 :(得分:1)
在黑暗中刺伤,但我遇到了同样的问题。我通过从我的工作区删除项目来解决它(小心不要从磁盘中删除),然后重新导入项目,它工作正常。我认为我的操作是由于Windows关机错误造成的(正确地重启Windows并没有解决问题)。 HTH。
答案 9 :(得分:1)
我发现在我的类路径中有一个WEB-INF / lib中的jar,但是当我将它升级到最新版本时,文件名是不同的。从类路径中删除旧的jar文件并添加新的文件解决了问题。奇怪的是,Eclipse似乎没有警告我,旧的jar文件丢失并且似乎编译,但是没有任何东西被编译,因此NoClassDefFoundError。我的线索是,build / classes目录在项目中设置为输出文件夹,但是在构建之后没有创建类文件。
答案 10 :(得分:1)
我有类似的问题,它与java构建路径引用的库有关;当我进行更新时,我正在引用不再存在的库。当我删除这些引用时,项目又开始运行了。
这些库列在项目属性窗口中的Java Build Path下。
希望这有帮助。
答案 11 :(得分:1)
去构建路径并检查jar文件中的错误,它们可能会被移动到其他地方。 如果jar文件有错误。通过单击添加外部罐子删除它们并找到它们。
-cnufederer
答案 12 :(得分:1)
确保您在项目中使用的所有库都未从工作空间中的其他项目引用。那是我的问题。
答案 13 :(得分:0)
java.lang.NoClassDefFoundError可能发生的另一种情况是在第一次尝试因某些其他异常或错误而失败后第二次/后续尝试实例化该类。 类加载器似乎缓存了第一次尝试无法实例化类的知识,而不是原因。因此它会报告NoClassDefFoundError。
因此,在尝试解决NoClassDefFoundError故障之前,确保没有错误/异常与早期尝试实例化类是一个好主意。
答案 14 :(得分:0)
对我来说(在 Eclipse 中使用 c++)这是因为 .h 与 .cpp 文件位于不同的窗口中。
答案 15 :(得分:0)
如果您正在使用Eclipse,请尝试Project&gt; clean,然后尝试重新启动服务器
答案 16 :(得分:0)
对我来说问题是我在&#34;运行配置&#34;下配置了另一个文件夹。有一个没有最新变化的课程。一旦我将其删除,请参考正确的bin文件夹,它开始工作。希望它可以帮到某人。
答案 17 :(得分:0)
这对我有用 eclipse :
答案 18 :(得分:0)
我看到人们已经谈过阶级路径了。由于没有可接受的答案,我认为它与类路径无关。所以我想补充一点,没有package指令也会导致类找不到错误。
答案 19 :(得分:0)
启动程序时,它会存储您可能修改的启动配置。如果在构建/运行过程中发生了某些变化,则可能是设置错误。例如,我曾经使用过maven,有些启动配置引用了maven2_classpath_container。 删除启动配置并再次运行程序时,它可以再次运行。
答案 20 :(得分:0)
这两个问题都会因为classpathref =“master-classpath”,请检查值是否正确
答案 21 :(得分:-1)
BY ABDULHAYEE:
当Java虚拟机无法在运行时找到编译时可用的特定类时,Java中会出现NoClassDefFoundError。例如,如果我们从类中调用方法或访问类的任何静态成员,并且该类在运行时不可用,那么JVM将抛出NoClassDefFoundError。重要的是要理解这与ClassNotFoundException不同,ClassNotFoundException是在尝试仅在运行时加载类时出现的,而名称是在运行时提供的,而不是在编译时提供的。许多Java开发人员混淆了这两个错误而感到困惑。简而言之,如果在编译期间存在类但在运行时期间在java类路径中不可用,则会出现NoClassDefFoundError。通常,当您获得NoClassDefFoundError时,您将在日志中看到以下行: 线程“main”java.lang.NoClassDefFoundError中的异常 线程“main”中的异常只是表明它的“主”线程无法找到特定的类,它可能是任何线程所以只是不用担心。进入主线程和其他线程的这个错误之间的区别是,当线程“main”中的whenException导致程序崩溃或自行关闭而不是其他线程时,程序将继续运行。
了解详情:http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz2jr35SsaZ