如何从命令行在 Windows 上运行 .class 文件?

新手上路,请多包涵

我正在尝试从命令行运行 .class 文件。当我手动移动到它存储的目录时它会工作,但是当我尝试这样的事情时:

 java C:\Peter\Michael\Lazarus\Main

它说它找不到主类。除了制作 .jar 文件之外,还有其他解决方案吗(我知道 .jar 是最好的解决方案,但目前不是我要找的那个)?

原文由 AndrejaKo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 692
2 个回答

Java 应用程序启动器(又名 java.exe 或简称 java )最多支持四种不同的方式来指定要启动的内容(取决于您使用的 Java 版本)。

  1. 指定 类名 是最基本的方式。请注意, 类名文件名 不同。
     java -cp path/to/classFiles/ mypackage.Main

在这里,我们启动类 mypackage.Main 并使用 -cp 开关指定用于查找类的类路径(类的完整路径 mypackage.Main path/to/classFiles/mypackage/Main.class

  1. 启动一个 jar 文件。
    java -jar myJar.jar

这会将 jar 本身和在其 Class-Path 条目上指定的任何内容放在类路径上,并启动通过 Main-Class 条目指示的类。请注意,在这种情况下,您 不能 指定任何其他类路径条目(它们将被静默忽略)。

  1. Java 9 引入了模块,并随之引入了一种启动特定模块的方法,其方式类似于选项 #2 的工作方式(通过启动该模块专用的主类或通过在该模块中启动用户指定的类):
    java --module my.module

  1. Java 11 引入了对 单文件源代码程序的 支持,这使得执行适合单个源文件的 Java 程序变得非常容易。它甚至为你做了编译步骤:
    java MyMain.java

这个选项对于第一次尝试 Java 很有用,但很快就会达到极限,因为它不允许您访问在另一个源文件中定义的类(除非您单独编译它们并将它们放在类路径中,这会失败这种方法的易用性意味着在这种情况下你应该切换回选项#1)。

此功能作为 JEP 330 开发,有时仍被称为 JEP 330。

对于您的特定情况,您将使用选项 #1 并告诉 java 使用 -classpath 选项(或其缩写形式 -cp )在哪里查找该类:

 java -classpath C:\Peter\Michael\Lazarus\ Main

如果 您的 Main.java 包含您的全部源代码(并且它在同一目录中),那么您可以使用选项 #4,跳过编译步骤并直接编译并执行它:

 java c:\Peter\Michael\Lazarus\Main.java

原文由 Joachim Sauer 发布,翻译遵循 CC BY-SA 4.0 许可协议

假设 Main.class 没有包声明:

 java -cp C:\Peter\Michael\Lazarus\  Main

Java 在“类路径”中查找类,可以通过 -cp 选项在命令行上进行设置。

原文由 Michael Borgwardt 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题