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

问题描述:

我是一个java新手。我一直在使用Eclipse来测试一个简单的Java类(名为NewHelloWorld),它在控制台中运行良好。当我尝试从终端做同样的事情,它编译正确(不给任何错误创建HelloWorld.class的),但随后java NewHelloWorld显示以下错误当我从终端运行java文件时发生java.lang.NoClassDefFoundError

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桌面

错名字:组织/ kodeplay/kodejava/NewHelloWorld

cd到包的根,让你的文件夹中包含很org文件夹然后做

java -cp . org.kodeplay.kodejava.NewHelloWorld 
+0

哦.. 得到它了。非常感谢 – naiquevin 2010-12-17 12:26:07

+1

不客气。 – BalusC 2010-12-17 12:26:57

+0

+1简而言之,完整答案。 – 2013-10-30 20:45:07

错误消息给你一个线索:

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

看起来你的班级叫做org.kodeplay.kodejava.NewHelloWorld。 Java命令行需要知道完全合格的类名:

java -cp . org.kodeplay.kodejava.NewHelloWorld 

应该这样做。

+0

http://meta.stackexchange.com/questions/15775/do-you-delete-your-own-answer-when-its-a-duplicate – BalusC 2010-12-17 12:34:03

+1

@BalusC:*答案*和*说明*。关于“Java命令行需要知道完全合格的类名”的一点是一个解释。我不认为这是重复的。 – 2010-12-17 12:37:23

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

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

而且我不会把.CLASSPATH永久(在.bashrc.bash_profile/etc/profile),可能导致不良行为。

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

java -cp . org.kodeplay.kodejava.NewHelloWorld应该工作

java org.kodeplay.kodejava.NewHelloWorld也应该工作。我试用过的东西,它在这两个

我有运行的HelloWorld程序我曾与在Mac OS X的文本编辑器,它运行在一个远程Linux盒罚款写了一个类似的问题的情况下工作正常,但从主目录运行它我得到了可怕的NoClassDefFoundError

发现我可以通过运行为解决这个问题:

java -cp . HelloWorld 

,或者没有在classpath预选赛中,将当前目录下我的bash CLASSPATH为本届会议之后:

export CLASSPATH=.