在 Eclipse 中成功编译,但使用终端失败

时间:2021-04-05 05:18:34

标签: java terminal

我正在尝试以 OOP 风格编写 Java 程序,并将两个文件放在名为实用程序的同一个文件夹下。该包也是实用程序。

HelloWorld.java

package utility;

class HelloWorld {

    public void hello() {
        System.out.println("Hello, world!");
    }

}

HelloWorldDriver.java

package utility;

public class HelloWorldDriver {
    public static void main(String[] args) {
        HelloWorld sayhello = new HelloWorld();
        sayhello.hello();
    }
}

我使用 Eclipse 运行 HelloWorldDriver.java,结果成功。

<块引用>

你好,世界!

然而,当我使用终端运行程序时,出现了问题。首先,我使用 javac 编译文件夹中的所有 .java 文件。然后,我直接运行文件。

bash-3.2$ javac *.java
bash-3.2$ java HelloWorldDriver.java

但是,出现了以下问题。

HelloWorldDriver.java:5: error: cannot find symbol
                HelloWorld sayhello = new HelloWorld();
                ^
  symbol:   class HelloWorld
  location: class HelloWorldDriver
HelloWorldDriver.java:5: error: cannot find symbol
                HelloWorld sayhello = new HelloWorld();
                                          ^
  symbol:   class HelloWorld
  location: class HelloWorldDriver
2 errors
error: compilation failed

请帮助建议代码或我使用命令行的方式是否有任何问题。

1 个答案:

答案 0 :(得分:0)

这里有两件事:

您的错误来自您尝试在命令行中运行代码的方式。当您使用 var something = value + 2 return something 命令时,您希望指定要运行的编译类文件,而不是要运行的 java 文件。这看起来类似于 tls [internal|<email>] | [<cert_file> <key_file>] { protocols <min> [<max>] ciphers <cipher_suites...> curves <curves...> alpn <values...> load <paths...> ca <ca_dir_url> ca_root <pem_file> dns <provider_name> [<params...>] eab <key_id> <mac_key> on_demand client_auth { mode [request|require|verify_if_given|require_and_verify] trusted_ca_cert <base64_der> trusted_ca_cert_file <filename> trusted_leaf_cert <base64_der> trusted_leaf_cert_file <filename> } issuer <issuer_name> [<params...>] } ,相当于 java。由于您正在引用驱动程序文件中的另一个文件,因此您需要将其添加到类路径中,以便 Java 运行时环境在您要求它运行该文件中的函数时知道该做什么。在您的情况下,我相信要运行的正确命令是 java myProgram.class

我想提到的另一件事是,在您的实际代码中,您实际上并不需要通过执行 java myProgram 来创建 HelloWorld 类的实例。相反,您可以删除该行并将其后的行更改为 java HelloWorldDriver -cp HelloWorld。在某些情况下,您不想这样做,但是对于您正在做的事情,使用 HelloWorld sayhello = new HelloWorld(); 就可以了。