Java .classファイルを実行するにはどうすればよいですか?


81

HelloWorldプログラムをコンパイルし、コマンドプロンプトを使用して実行しています。.classファイルの名前はHelloWorld2.classです。

このファイルはC:\ Users \ Matt \ workspace \ HelloWorld2 \ binにあります。コマンドプロンプトに移動して「JavaHelloWorld2」と入力すると、次のように表示されます。

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
あなたの問題に対するアイザックの答えに加えて。大文字はMSWindowsでのみ機能するため、「java」を小文字で記述することをお勧めします。
Hendrik Brummermann 2011

回答:


95

コンパイルされたクラスを見つけるには、クラスパスを設定する必要があります。

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


それは私のファイル構造のどこからでも完全に機能します。コンパイルされたクラスへのパスを-cpparamに入力し、次にコンパイルされたクラス名をパスなしで入力するだけです。コンパイルされたクラスと同じフォルダーにいる場合は、-cpパラメーターなしでこのクラスを実行することもできます。
ヴァーツラフ

42

コマンドラインからJavaクラスファイルを実行するための構文は次のとおりです。

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

どこのpackageName(通常のいずれかで始まるcomかはorg)あなたのクラスファイルが存在するフォルダ名です。

たとえば、メインクラス名がAppで、アプリのJavaパッケージ名com.foo.appである場合、クラスファイルはcom/foo/appフォルダー(ドットごとに別々のフォルダー)にある必要があるため、アプリを次のように実行します。

$ java com.foo.app.App

注:$はシェルプロンプトを示しています。入力するときは無視してください。

クラスにpackage名前が定義されていない場合は、次のように実行しますjava App

他のjar依存関係がある場合は、クラスパスパラメータを-cp/で指定するか、jar / war / ear / zip / classファイルのあるフォルダを指す変数を-classpath使用して指定してください。したがって、Linuxでは、コマンドの前に:を付けることができます。Windowsでは、フォルダーをシステム変数に追加する必要があります。設定されていない場合、ユーザークラスパスは現在のディレクトリ()で構成されます。CLASSPATHCLASSPATH=/path/to/jars.


実例

Mavenを使用してサンプルプロジェクトを作成したとすると、次のようになります。

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

そして私たちは、当社のプロジェクトをコンパイルしたmvn compile私たちの中にmy-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コンパイルされたファイルが難読化されている場合は機能しません。


2

これは多くのことを意味する可能性がありますが、最も一般的なのは、ファイルに含まれるクラスがファイル自体と同じ名前を持たないことです。したがって、クラスがHelloWorld2とも呼ばれるかどうかを確認してください。


0
  1. コンパイルするJavaファイルを保存したパスに移動します。
  2. cmdと入力してパスを置き換え、Enterキーを押します。
  3. コマンドプロンプトディレクトリがポップアップし、次のようなパスファイルが含まれます。 C:/blah/blah/foldercontainJava
  4. 入る javac javafile.java
  5. Enterキーを押します。Javaクラスファイルを自動的に生成します

-3

Javaを小文字にし、.classを追加する必要があります。

java HelloWorld2.class
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.