我正在尝试学习从 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 在运行时找不到它(在这里找到了一篇关于它的好文章)。我认为问题与 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
我不断得到同样的例外。如果有人可以解释我的错误以及为什么会发生这种情况,我会很好,甚至可以指出一些方向,我可以在哪里阅读更多关于此的信息。
谢谢你。