如何运行Java .class文件?


80

我已经编译了一个HelloWorld程序,并且正在使用命令提示符运行它。.class文件被命名为HelloWorld2.class

该文件位于C:\ Users \ Matt \ workspace \ HelloWorld2 \ bin,这是我进入命令提示符并键入“ Java HelloWorld2”时得到的内容:

C:\Users\Matt>Java HelloWorld2
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld2
Caused by: java.lang.ClassNotFoundException: HelloWorld2
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: HelloWorld2.  Program will exit.

我期待看到打印出HelloWorld。我究竟做错了什么?我已经安装了JDK。


9
除了以撒对您的问题的回答。用小写写“ java”可能是个好主意,因为大写仅适用于MS Windows。
Hendrik Brummermann 2011年

Answers:


93

您需要设置类路径以找到已编译的类:

java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2


它可以在我的文件结构中的任何位置完美运行。只需将已编译类的路径放入-cp参数,然后将已编译类的名称放入任何路径。如果与已编译类位于同一文件夹中,则也可以不使用-cp参数来运行此类。
瓦茨拉夫

40

要从命令行运行Java类文件,语法为:

java -classpath /path/to/jars <packageName>.<MainClassName>

其中packageName(通常以com或开头org)是您的类文件所在的文件夹名称。

例如,如果您的主类名称为App,而您的应用程序的Java包名称com.foo.app,则您的类文件需要位于com/foo/app文件夹中(每个点分别位于一个文件夹中),因此您可以按以下方式运行应用程序:

$ java com.foo.app.App

注意:$表示shell提示,键入时忽略

如果您的类package未定义任何名称,则只需运行为:java App

如果您还有其他jar依赖项,请确保使用/或使用指向jar / war / ear / zip / class文件的文件夹的变量指定了classpath参数。因此,在Linux上,您可以在命令前加上:,在Windows上,您需要将该文件夹添加到系统变量中。如果未设置,则用户类路径由当前目录()组成。-cp-classpathCLASSPATHCLASSPATH=/path/to/jars.


实际例子

鉴于我们已经使用Maven创建了示例项目,如下所示:

$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

并且我们已经mvn compilemy-app/dir中编译了项目,它将在中生成我们的类文件target/classes/com/foo/app/App.class

要运行它,我们可以通过指定类路径,也可以-cp直接指定它,请查看以下示例:

$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ java com.foo.app.App
Hello World!
$ java -cp target/classes com.foo.app.App
Hello World!
$ java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && java com.foo.app.App
Hello World!

要仔细检查您的类和程序包名称,可以使用Java类文件反汇编程序工具,例如:

$ javap target/classes/com/foo/app/App.class
Compiled from "App.java"
public class com.foo.app.App {
  public com.foo.app.App();
  public static void main(java.lang.String[]);
}

注意:javap如果编译后的文件已被混淆,将无法使用。



0
  1. 转到保存要编译的Java文件的路径。
  2. 通过键入cmd替换路径,然后按Enter。
  3. 命令提示符目录将弹出,其中包含路径文件,例如 C:/blah/blah/foldercontainJava
  4. 输入 javac javafile.java
  5. 按Enter键。它将自动生成java类文件

-3

您必须将Java小写,并且必须添加.class!

java HelloWorld2.class
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.