无法使用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
# 1 楼答案
当您运行这个程序时,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
,告诉它文件的存放位置。如果要分离源文件和类文件,那么应该针对名为bin
或build
或诸如此类的目录(目录src
的同级目录)# 2 楼答案
当您使用
javac ABC.java
时,您正在编译该类,并且javac
将其放置在当前目录中所以
java com.hello.programs.ABC
不起作用(因为com/hello/programs/ABC.class
文件不存在)您可以使用javac
-d
标志:例如:
会起作用,因为
javac
确实在com/hello/programs中放置了ABC更新:为清晰起见,一旦使用
javac -d . ABC.java
编译,就可以使用java com.hello.programs.ABC
运行它,并且应该在屏幕上看到Hello world