如何运行Java .class文件?

时间:2011-04-22 15:48:55

标签: java compilation

我编译了一个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。

5 个答案:

答案 0 :(得分:75)

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

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

答案 1 :(得分:29)

要从命令行运行Java class file,语法为:

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

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

例如,如果您的主要班级名称为应用且应用的Java package namecom.foo.app,则您的班级文件必须位于com/foo/app文件夹中(每个点的单独文件夹),所以你运行你的应用程序:

$ java com.foo.app.App

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

如果您的班级没有定义任何package名称,只需运行:java App

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

实际例子

鉴于我们使用Maven创建了示例项目:

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

我们在mvn compile目录中按my-app/汇编了我们的项目,它会生成我们的类文件在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将无效。

答案 2 :(得分:2)

这可能意味着很多事情,但最常见的是文件中包含的类与文件本身的名称不同。因此,检查您的类是否也称为HelloWorld2。

答案 3 :(得分:0)

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

答案 4 :(得分:-3)

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

java HelloWorld2.class