有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法使用Java11和Windows在cmd上运行Java应用程序

我在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


共 (2) 个答案

  1. # 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的同级目录)

  2. # 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确实在com/hello/programs中放置了ABC

    更新:为清晰起见,一旦使用javac -d . ABC.java编译,就可以使用java com.hello.programs.ABC运行它,并且应该在屏幕上看到Hello world