0

我正在尝试学习从 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

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

谢谢你。

4

3 回答 3

1

班级

package Desktop;

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

编译(这里Desktop指的是标准的 windows 目录)

javac Desktop\Hello.java

执行(这里的Desktop意思是package.Desktop/Hello是完整的类名)

 java Desktop/Hello
于 2013-07-23T17:39:08.787 回答
0
java -classpath 'C:\Users\Tomas\Desktop\Hello.class'

应该运行它。

于 2013-07-23T17:41:06.563 回答
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:\用户\托马斯\桌面“你好

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

于 2013-07-23T17:42:24.403 回答