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

Posted

技术标签:

【中文标题】如何从命令行在 Windows 上运行 .class 文件?【英文标题】:How do I run .class files on windows from command line? 【发布时间】:2011-02-21 07:39:40 【问题描述】:

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

java C:\Peter\Michael\Lazarus\Main

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

【问题讨论】:

【参考方案1】:

Java application launcher(又名java.exe 或简称为java)期望支持多达四种不同的方式来指定要启动的内容(取决于您使用的 Java 版本)。

    指定一个类名是最基本的方法。请注意,类名文件名不同。

     java -cp path/to/classFiles/ mypackage.Main
    

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

    启动一个 jar 文件。

    java -jar myJar.jar
    

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

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

    java --module my.module
    

    Java 11 引入了对 Single-File Source Code Programs 的支持,这使得执行适合单个源文件的 Java 程序变得非常容易。它甚至为您执行编译步骤:

    java MyMain.java
    

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

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

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

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

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

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

【讨论】:

哇。 Java 只用了 11 个版本就可以以简单的方式运行一个简单的程序。现在说真的,它很好地满足了快速原型设计、测试新事物的目的,并且非常适合 Java 新手(就像我一样)【参考方案2】:

假设Main.class 没有包声明:

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

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

【讨论】:

【参考方案3】:

我刚遇到同样的问题,我尝试运行java hello.class,这是错误的。

命令应该是java hello

不要包含文件扩展名。它正在寻找一个类文件,并会自行添加名称。

所以运行“java hello.class”会告诉它去寻找“hello.class.class”文件。

【讨论】:

【参考方案4】:

试试这个:

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

您需要定义类路径。

【讨论】:

以上是关于如何从命令行在 Windows 上运行 .class 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行在 iPhone 上启动 OCUnit 测试

如何从命令行在 Microsoft Edge 中打开 URL?

如何通过命令行在服务器上运行php脚本

从命令行在CMake项目上设置MSVC运行时

如何使用命令行在 Gradle 上运行空手道测试

从命令行在脚本中运行的 Docker 命令