【发布时间】:2011-02-21 07:39:40
【问题描述】:
我正在尝试从命令行运行 .class 文件。当我手动移动到它存储的目录时它可以工作,但是当我尝试这样的事情时:
java C:\Peter\Michael\Lazarus\Main
它说它找不到主类。除了制作 .jar 文件之外,还有其他解决方案吗(我知道 .jar 是最好的解决方案,但目前不是我正在寻找的解决方案)?
【问题讨论】:
标签: java windows terminal .class-file
我正在尝试从命令行运行 .class 文件。当我手动移动到它存储的目录时它可以工作,但是当我尝试这样的事情时:
java C:\Peter\Michael\Lazarus\Main
它说它找不到主类。除了制作 .jar 文件之外,还有其他解决方案吗(我知道 .jar 是最好的解决方案,但目前不是我正在寻找的解决方案)?
【问题讨论】:
标签: java windows terminal .class-file
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
【讨论】:
假设Main.class 没有包声明:
java -cp C:\Peter\Michael\Lazarus\ Main
Java 在“类路径”中查找类,可以通过-cp 选项在命令行中设置。
【讨论】:
我刚遇到同样的问题,我尝试运行java hello.class,这是错误的。
命令应该是java hello。
不要包含文件扩展名。它正在寻找一个类文件,并会自行添加名称。
所以运行“java hello.class”会告诉它去寻找“hello.class.class”文件。
【讨论】:
试试这个:
java -cp C:\Peter\Michael\Lazarus Main
您需要定义类路径。
【讨论】: