.class
を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;
を削除するだけで問題が解決することに注意してください。他のシナリオでは、メインクラスファイルが見つからない、またはそれらの行に沿って何かが見つからないというエラーが表示されることがあります。
何が間違っていますか?
cd C:/projects
およびHelloWorld.class
はC:/projects/com
、次に入力するだけです:
Java com.HelloWorld
パッケージは、ファイルの予想されるディレクトリの場所に直接関連しています。
つまり、com
のパッケージディレクティブを持つソースファイルがある場合、そのファイルはcom
ディレクトリに存在することが予想されます。
HelloWorld
の例では、HelloWorld.Java
ファイルはcom\HelloWorld.Java
のようなcom
ディレクトリに保存されることが期待されます。
ファイルをコンパイルすると、HelloWorld.class
などのcom
ディレクトリにcom\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!
Packages チュートリアルを読んでみたいと思うかもしれません
構文は次のとおりです。
Java -classpath /path/to/package-folder <packageName>.<MainClassName>
試してみてください:Java com.HelloWorld
これはcom/HelloWorld.class
ファイルは、デフォルトでクラスパスとして存在し、現在のディレクトリを指します(指定されていない場合)。
別のフォルダーにいる場合は、classpathを指定してみてください。
$ CLASSPATH=/path/to/package-folder/ Java com.HelloWorld
Hello World!
$ Java -cp /path/to/package-folder/ com.HelloWorld
Hello World!
$ cd /path/to/package-folder/ && Java com.HelloWorld
Hello World!
詳細については、次を確認してください。 実行方法Java .class files?
comディレクトリの親ディレクトリからプログラムを実行します。
Java com.HelloWorld
ファイルがC:/ projects/com/HelloWorldにあるとします。次の方法を試すことができます。
1 .Java -cp c:/projects com.HelloWorld
2 .cd c:/projects
Java com.HelloWorld
(例2は、Javaプロセスなど、多くの状況で機能しません。)
パッケージ宣言がなく、少しの変更がある場合。
1 .Java -cp c:/projects/com HelloWorld
2 .cd c:/projects/com
Java HelloWorld
(同じ理由で良くない。)
または、相対パスは問題ありませんが、ある程度のリスクがあります。最後に、cmdの最後にクラスファイルを置いてください。
Javaコードをコンパイルするとき、-dを使用します。この場合、
javac -d . com.HelloWorld.Java
上記のコマンドの後、Javaコンパイラーは「com」という名前のフォルダーを生成し、「com」フォルダーの下に、HelloWorld.classが表示されます。
次に、javacを実行するのと同じフォルダーで、次のコマンドを実行します
Java com.HelloWorld
「* .class」ファイルのフォルダから「Java」コマンドを直接実行している場合、このような問題が発生する可能性があります。このコマンドは、プロジェクトの「親」ディレクトリから実行する必要があります。すべては、次の記事で詳しく説明されています。
Java folderの下にcom
という名前のフォルダーを作成し、HelloWorld.Java
をcom
フォルダーに入れます。その後、javac
とJava
を再度実行します。
絶対ディレクトリを使用するか、HelloWorld.classを..\last_directory\comに配置してください。
1. Java -cp .......\last_directory com.HelloWorld
2. Java -cp .......\last_directory HelloWorld(with created com)
Java class、バイナリ(jar)ファイルからクラスまたはメインプログラムを実行する場合は-cpが必要です。コマンドからメインプログラムを実行する場合は、-cpフラグを実行する必要はありません。 Javaファイル、ex。
home/user/foo Java com.test.className
here classNmae class file and exist under home/user/foo/com/test
それが役に立てば幸い。