我正在尝试学习从Windows命令行运行java应用程序,我无法找出一个问题。
我桌面上有一个简单的课程:
public class Hello{
public static void main(String[] args){
System.out.println("1, two, three");
}
}
如果我在cmd中的桌面目录中运行javac
和java
命令,一切都很好,但是如果我回到一个目录(所以我不会在同一个目录中)作为.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
我一直得到同样的例外。 如果有人可以解释我的错误以及为什么会发生这种情况,我会很高兴,甚至可以指出一些方向,我可以在哪里阅读更多相关信息。
谢谢。
答案 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
表示package
。Desktop/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
我只从您的班级名称中删除了桌面。