从.class文件以外的目录运行java.exe时的NoClassDeffFoundError

时间:2013-07-23 17:36:54

标签: java

我正在尝试学习从Windows命令行运行java应用程序,我无法找出一个问题。

我桌面上有一个简单的课程:

public class Hello{
    public static void main(String[] args){
        System.out.println("1, two, three");
    }
}

如果我在cmd中的桌面目录中运行javacjava命令,一切都很好,但是如果我回到一个目录(所以我不会在同一个目录中)作为.java和.class文件)然后我的cmd目录是C:\Users\Tomas,我的Hello.java和Hello.class文件在C:\Users\Tomas\Desktop。我可以运行命令javac Desktop\Hello.java并且它可以正常运行,但如果我尝试java Desktop\Hello.java,我会得到一个Exception in thread "main" java.lang.NoClassDefFoundError: Desktop\Hello (wrong name: Hello)

我知道当一个类在编译时可用时会抛出NoClassDefFoundError,但ClassLoader在运行时无法找到它(找到一篇关于它的好文章here)。 我认为这个问题与CLASSPATH变量有关,所以我把它设置为:

"C:\Program Files\Java\jdk1.7.0_21\jre\lib\ext";.;"C:\Program Files\Java\jdk1.7.0_21\jre\bin";"C:\Users\Tomas\Desktop"

(我包括“C:\ Users \ Tomas \ Desktop”只是为了尝试一切) 我尝试使用-classpath和-cp选项运行“java”命令:

java -classpath "C:\Program Files\Java\jdk1.7.0_21\jre\lib\ext";.;"C:\Program Files\Java\jdk1.7.0_21\jre\bin";"C:\Users\Tomas\Desktop" Desktop\Hello

我一直得到同样的例外。 如果有人可以解释我的错误以及为什么会发生这种情况,我会很高兴,甚至可以指出一些方向,我可以在哪里阅读更多相关信息。

谢谢。

3 个答案:

答案 0 :(得分:1)

上课

package Desktop;

public class Hello{
    public static void main(String[] args){
        System.out.println("1, two, three");
    }
}

compile(这里Desktop表示标准的windows目录)

javac Desktop\Hello.java

执行(此处Desktop表示packageDesktop/Hello是完全类名)

 java Desktop/Hello

答案 1 :(得分:0)

java -classpath 'C:\Users\Tomas\Desktop\Hello.class'

应该运行它。

答案 2 :(得分:0)

尝试java -classpath“C:\ Program Files \ Java \ jdk1.7.0_21 \ jre \ lib \ ext”;;;“C:\ Program Files \ Java \ jdk1.7.0_21 \ jre \ bin”;“ C:\ Users \ Tomas \ Desktop“Hello

我只从您的班级名称中删除了桌面。