更新到Java 7后出现NoClassDefFoundError

更新到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

在执行项目的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(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

更新:

根据Andrew Thompson的评论,使用-jar参数将使-classpath参数变得无用(它将被忽略)。要在命令行中指定类路径,还必须使用主类的完全限定名作为启动参数:

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