【问题标题】:Cannot run Java app on cmd using Java11 and Windows无法使用 Java11 和 Windows 在 cmd 上运行 Java 应用程序
【发布时间】:2021-05-30 23:15:02
【问题描述】:

我已经尝试了How do I run a Java program from the command line on Windows? 上的几种方法,并创建了完全相同的类和包来使用相同的东西。

这是位于C:\SimpleJavaProject\src\com\hello\programs的示例类:

package com.hello.programs;

public class ABC {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

然后我按照通常的方式编译它:

C:\SimpleJavaProject\src\com\hello\programs > javac ABC.java

稍后,通过给出包名和我的 java 类名来运行它:

C:\SimpleJavaProject\src > java com.hello.programs.ABC

每次我尝试运行 java 应用程序时,都会收到“错误:无法找到或加载主类 com.hello.programs.ABC”错误。然后查看What does “Could not find or load main class” mean? 页面并在该页面上尝试了一些方法。但还是同样的错误。

这太简单了,但我还没有设法运行这个简单的应用程序。那么,如何解决这个问题呢?运行应用程序后,如何在 cmd 上传递 args?

更新:我已经可以通过运行以下命令生成ABC.class 文件。但是,我无法运行应用程序并在控制台上看到“Hello world”。

cd C:\SimpleJavaProject\src\com\hello\programs
javac ABC.java

--> 在C:\SimpleJavaProject\src\com\hello\programs 中生成ABC.class

【问题讨论】:

  • 请注意,像您这样简单的程序可以作为单源文件运行,只需使用 java ABC.java 即可一次性编译和运行程序。
  • @Holger 我想知道您是否只是创建一个简单的应用程序并在您的 PC 中测试您的答案?
  • 你为什么认为我没有?
  • 因为没有一个建议是有效的,如果没有缺失的点,你不应该尝试。

标签: java windows cmd console-application java-11


【解决方案1】:

java com.hello.programs.ABC

当你运行它时,java 会检查每个 CLASSPATH 路径中的 + /com/hello/programs/ABC.class,然后加载它,然后运行它。

这必须意味着:

[A] 你的类路径不包括当前目录;修复是java -cp . com.hello.programs.ABC

[B] 你没有做你写的,例如dir com/hello/programs.ABC.class 什么也不打印。

请注意,您做得不对;类文件永远不应位于包含src 的目录路径中。如果您不想使用 maven 或 gradle 等构建工具,我强烈建议您也不要使用 src 目录。如果必须,可以将-d 选项传递给javac 以告诉它您将文件放在哪里。如果你想分离源文件和类文件,那么应该定位一个名为 binbuild 或诸如此类的目录(src 目录的兄弟)。

【讨论】:

  • 所以转到您已在此问题中显示的目录(src 目录,not src/com/hello/programs),然后运行java com.hello.programs.ABC )。如果这不起作用,请运行java -cp . com.hello.programs.ABC
  • 您的示例已接近工作,但您没有提供我应该运行命令的目录。因此,创建了一些不必要的文件夹。我想知道您是否只是创建一个简单的应用程序并在您的 PC 中测试您的答案?
  • 那是因为该命令将在您的问题已经提出的确切目录中运行。做你自己说你做的事。遵循您自己的指示。我有,效果很好。
【解决方案2】:

当您使用javac ABC.java 时,您正在编译该类,javac 将其放置在当前目录中。

所以java com.hello.programs.ABC 不起作用(因为com/hello/programs/ABC.class 文件不存在)。

您可以使用 javac -d 标志:

-d <directory>               Specify where to place generated class files

例如:

> javac -d . ABC.java
> java com.hello.programs.ABC
Hello world
> cd com\hello\programs
> dir
ABC.class

会起作用,因为javac 确实将 ABC 放在了 com/hello/programs 中。

更新:为清楚起见,使用javac -d . ABC.java 编译后,您可以使用java com.hello.programs.ABC 运行它,您应该会在屏幕上看到Hello world

【讨论】:

  • 您的示例即将完成,但您没有提供我应该运行命令的目录。因此,创建了一些不必要的文件夹。我想知道您是否只是创建一个简单的应用程序并在您的 PC 中测试您的答案?
猜你喜欢
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多