42

.classa の一部を作成packageして cmd から実行しようとすると、エラーが発生し続けます。

javac以下は、javaを使用した後に機能するコードです。

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

そして、動作しないコード:

package com;

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

コマンドを使用してプログラムを実行しようとすると、このエラーが発生します: java HelloWorld:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: com/HelloWorld)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    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)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

これまでに試したことは次のとおりです。

java -cp . HelloWorld
java -cp . com.HelloWorld
java -cp . com/HelloWorld
java HelloWorld
java com.HelloWorld
java com/HelloWorld

エラーなしでjavac返され、単に削除するだけpackage com;で問題が解決することに注意してください。他のシナリオでは、メインクラスファイルが見つからない、またはそれらの行に沿った何かを示すエラーが発生することがあります。

私は何を間違っていますか?

4

12 に答える 12

38

cd C:/projectsあなたがしたと仮定し、 にいる場合HelloWorld.classC:/projects/com、次のように入力します。

java com.HelloWorld
于 2013-08-09T03:54:42.813 に答える
16

パッケージは、ファイルの予期されるディレクトリの場所に直接関連しています。

つまり、パッケージ ディレクティブを含むソース ファイルがある場合、comそのファイルはディレクトリに存在することが期待されますcom

あなたの例では、ファイルは次のようにディレクトリに保存されるHelloWorldことが予想されますHelloWorld.javacomcom\HelloWorld.java

ファイルをコンパイルすると、次のようなディレクトリで呼び出さHelloWorld.classれるクラス ファイルが作成されます。comcom\HelloWorld.class

このように、Java がクラスを探しに行くとき、com.HelloWorld実際にはそのクラス パスを検索しcom\HelloWorld.class、クラス ファイルが見つかるかクラス パスがなくなるまで追加します。

HelloWorld.javaだから、私はあなたの(パッケージ付きの)例をにコピーしましたC:\java\com\HelloWord.java

コマンドラインから、C:\javaディレクトリに変更しました...

C:\java>dir com
 Volume in drive C is OS
 Volume Serial Number is ####-####

 Directory of C:\java\com

09/08/2013  01:55 PM    <DIR>          .
09/08/2013  01:55 PM    <DIR>          ..
09/08/2013  01:55 PM               135 HelloWorld.java

次に、コンパイルしましたHelloWorld.java

C:\java>javac com\HelloWorld.java

それから私はそれを実行しました...

C:\java>java com.HelloWorld
Hello World!

パッケージのチュートリアルを読んでおくことをお勧めします

于 2013-08-09T03:54:51.603 に答える
3

comディレクトリの親ディレクトリからプログラムを実行します。

java com.HelloWorld
于 2013-08-09T03:56:09.633 に答える
1

comJava フォルダーの下に名前の付いたフォルダーを作成し、フォルダーにHelloWorld.java入れcomます。その後、再度実行しjavacjava.

于 2013-08-09T04:04:52.483 に答える
0

Java クラスの実行中は -cp フラグは必要ありませんが、クラスまたはバイナリ (jar) ファイルからのメイン プログラムの実行中には -cp が必要です。コマンド ラインからメイン プログラムを実行している間は、Java ファイルのパッケージ名と同じフォルダー構造にクラスがあることを確認する必要があります。

home/user/foo java com.test.className   

here classNmae class file and exist under home/user/foo/com/test

それが役に立てば幸い。

于 2017-01-02T04:50:42.193 に答える
0

絶対ディレクトリを使用するか、HelloWorld.class を ..\last_directory\com に配置してみてください

1. java -cp .......\last_directory com.HelloWorld
2. java -cp .......\last_directory HelloWorld(with created com)
于 2013-08-09T03:55:27.150 に答える
-2

CMD で次のコマンドを入力して、最初にコンパイルする必要があります。たとえば、ファイルは c:\ directory にあります。

C:\com>javac HelloWorld.java

その後、次のように入力して結果を実行できます。

c:\com>java HelloWorld
于 2013-08-09T04:22:26.723 に答える