Java - 找不到主类

4 java

当我尝试运行一个简单的 Hello World 程序时,我不断收到一条消息说Could not find the main class.

在 Ubuntu 论坛上找到了这个帖子,它表明我的CLASSPATH变量搞砸了,但我找不到修复它的方法。

我究竟做错了什么?

Lek*_*eyn 7

当代码如下:

class Foo {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)

您需要java Foo在包含Foo.class(编译后javac Foo.java)的目录中运行。如果您在不同的目录中,请说~类文件所在的位置~/bar/Foo.class,则需要在运行 java 之前设置类路径:

CLASSPATH=~/bar java Foo
Run Code Online (Sandbox Code Playgroud)

如果您使用的是软件包,例如:

package bar;
class Foo {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)

那么你需要将它保存到path/bar/Foo.java和编译path/bar/Foo.classjavac path/bar/Foo.java和运行path/

java bar.Foo
Run Code Online (Sandbox Code Playgroud)

  • `java -cp ~/bar foo` 算不算?`-cp` 是 `-classpath` 的短选项,与设置 `CLASSPATH` 相同 (2认同)
  • 夫妇评论:首先,强烈建议避免 env var $CLASSPATH 像瘟疫一样;其次,一个避免特定于 shell 的扩展的温和建议,例如假设“~”将评估为 $HOME。例如,这有效(因为“~”在 Java 运行之前展开): CLASSPATH=~/tmp java bar.Foo; 就像这样: java -cp ~/tmp bar.Foo; 但这没有(添加引号): java -cp "~/cp" bar.Foo ... 但这确实有效: java -cp "$HOME/bar" ... 所有这些当然与 Java 无关,而是 shell 怪癖,其中引号(或没有引号)可能会导致外行的意外结果...... (2认同)