更新到Java 7后出现NoClassDefFoundError
在执行项目的JAR文件之后,我得到了NoClassDefFoundError。 使用Eclipse进行调试工作正常,但自从安装JDK1.7以来,每当我使用windows命令更新到Java 7后出现NoClassDefFoundError,java,log4j,noclassdeffounderror,Java,Log4j,Noclassdeffounderror,在执行项目的JAR文件之后,我得到了NoClassDefFoundError。 使用Eclipse进行调试工作正常,但自从安装JDK1.7以来,每当我使用windows命令java-jar myproject.jar时,就会出现这个错误 使用Java1.6它工作得很好 以下是错误日志: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout at program.Main.main(Ma
java-jar myproject.jar
时,就会出现这个错误
使用Java1.6它工作得很好
以下是错误日志:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout
at program.Main.main(Main.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Layout
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)
... 1 more
我在谷歌上搜索了一下,但找不到正确的解决方案
我已经做了:
-卸载Java 1.7,改为安装1.6
-检查类路径
-在其他计算机上尝试(从中卸载Java 1.7后)
-创建一个空项目,引用log4j库=>同样的问题
下面是类路径文件:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con"path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="lib" path="lib/RXTXcomm.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
EDIT2:我最终解决了最后一个问题,将rxtxSerial.dll放在Windows/system32文件夹中。
但是,我仍然不明白,如果我将项目导出为JAR文件,为什么它不再工作,为什么现在需要使用dll文件。运行JAR文件时,您确定log4j的JAR在类路径中吗?检查以下任一项:
- 您有一个CLASSPATH系统变量,其中包含log4j的jar所在的文件夹
- 在启动jar时,将log4jjar文件夹作为参数传递 java-jar yourJar.jar-classpath c:\myLog4JJarFolder
java -classpath "c:\dir1;c:\dir2" package.subPackage.MainClass
除上述内容外,我还要检查以下几点:
- 确保已将所有资源打包到可执行JAR中。取出你的罐子,看一看,确认一下
- 将jar添加到类路径: java-cp[jar here]main.java
java-jar-yourJar.jar-classpath c:\myLog4JJarFolder
如果指定了-jar
,那么-classpath
选项将被忽略。Doh,你说得对,我会更新我的答案,但也会将原始答案留给像我这样的天才。我照你说的做了。我进入项目的bin文件夹并启动了类:java-classpath“C:\Documents and Settings\Nils\workspace\Transcodeur2.1\src>java-classpath”C:\Program Files\java\jdk1.6.0\u 34\lib\log4j-1.2.15.jar“fr.sncf.transcodeur.Main但我得到的是:线程中的异常”Main“java.lang.NoClassDefFoundError:fr/sncf/transcodeur/Main我还尝试添加“.class”文件扩展名(…Main.class),但没有改变任何事情。顺便说一句,我不太习惯使用控制台(这就是你使用IDE时得到的结果!),所以我可能误解了你。你看到这个问题了吗?将它导出为可运行的JAR文件,而不是简单的JAR文件。我得到另一个错误,但是程序启动并在屏幕上打印东西。我让它与一个可运行的JAR一起工作。谢谢;-)我检查了JAR文件,所有的东西都在那里(“lib”文件夹,里面有所有的libraries+.class文件)。通过执行java-cp命令,我在线程“main”java.lang.NoClassDefFoundError:Transcodeur2/1\src\fr\sncf\transcodeur\main/java中得到了错误:由以下原因引起的异常:java.lang.ClassNotFoundException:Transcodeur2.1\src\fr\sncf\transcodeur\main.java路径应该是正确的,因为我从windows Explorer复制/粘贴了它。我需要两件事。1:运行java命令的当前工作目录,2:typine命令(例如java-cp/src/main/lib/myjar.jar main.java
java -classpath "c:\dir1;c:\dir2" package.subPackage.MainClass