java.lang.NoClassDefFoundError当我从终端运行java文件时

时间:2010-12-17 12:21:39

标签: java

我是一个java新手。我一直在使用Eclipse来测试一个简单的java类(名为NewHelloWorld),它在控制台中运行良好。当我尝试从终端执行相同的操作时,它会正确编译(创建一个HelloWorld.class而不会出现任何错误),但是java NewHelloWorld显示以下错误

Exception in thread "main" java.lang.NoClassDefFoundError: NewHelloWorld (wrong name: org/kodeplay/kodejava/NewHelloWorld)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    Could not find the main class: NewHelloWorld. Program will exit.

我也试过了java -classpath . NewHelloWorld但是这也不起作用同样的错误。

这些是环境变量的值:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
JAVA_HOME="/usr/lib/jvm/java-6-openjdk"
CLASSPATH="/usr/lib/jvm/java-6-openjdk/lib:."

还有其他需要或我在这里遗漏了什么吗? 感谢

PS:使用Ubuntu 10.04桌面

5 个答案:

答案 0 :(得分:9)

  

错误的名称:org / kodeplay / kodejava / NewHelloWorld

cd直到包根,以便您在包含org文件夹的文件夹中然后执行

java -cp . org.kodeplay.kodejava.NewHelloWorld

答案 1 :(得分:4)

错误消息为您提供线索:

(wrong name: org/kodeplay/kodejava/NewHelloWorld)

您的班级似乎被称为org.kodeplay.kodejava.NewHelloWorld。 Java命令行需要知道完全限定的类名:

java -cp . org.kodeplay.kodejava.NewHelloWorld

应该这样做。

答案 2 :(得分:1)

转到包根目录(org的父目录)并运行:

java -cp .:$CLASSPATH org.kodeplay.kodejava.NewHelloWorld

此外,我不会.永久地CLASSPATH.bashrc.bash_profile/etc/profile,这可能会导致意外行为。< / p>

答案 3 :(得分:0)

cd直到root包。大多数情况下,如果从eclipse IDE创建,它将是Project中的src文件夹。

java -cp . org.kodeplay.kodejava.NewHelloWorld应该有效

java org.kodeplay.kodejava.NewHelloWorld也应该有效。我试过这两件事,但在这两种情况下都能正常工作

答案 4 :(得分:0)

我在Mac OS X上运行了一个用文本编辑器编写的 HelloWorld 程序时遇到了类似的问题。它在远程Linux机器上运行正常,但是从主目录运行它我得到了可怕的NoClassDefFoundError

发现我可以通过运行:

来修复它
java -cp . HelloWorld

或者,在没有classpath限定符的情况下,将当前目录添加到当前会话的bash CLASSPATH之后:

export CLASSPATH=.