以下は、Linuxターミナルで試したものです。Test.Javaをコンパイルし、Test.classを実行すると、エラーが発生しました。次に、「-classpath」を使用して同じコマンドを試しました。オプションと「-cp」。オプションですが、失敗しました。
/testpackage$ cat Test.Java
package testpackage;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("May I take your order?");
}
}
/testpackage$ javac Test.Java
/testpackage$ Java testpackage.Test
Exception in thread "main" Java.lang.NoClassDefFoundError: testpackage/Test
Caused by: Java.lang.ClassNotFoundException: testpackage.Test
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:217)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:205)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:321)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:294)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:266)
Could not find the main class: testpackage.Test. Program will exit.
/testpackage$ Java -cp . testpackage.Test
Exception in thread "main" Java.lang.NoClassDefFoundError: testpackage/Test
Caused by: Java.lang.ClassNotFoundException: testpackage.Test
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:217)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:205)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:321)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:294)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:266)
Could not find the main class: testpackage.Test. Program will exit.
/testpackage$ Java -classpath . testpackage.Test
Exception in thread "main" Java.lang.NoClassDefFoundError: testpackage/Test
Caused by: Java.lang.ClassNotFoundException: testpackage.Test
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:217)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:205)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:321)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:294)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:266)
Could not find the main class: testpackage.Test. Program will exit.
/testpackage$
しかし、パッケージ「testpackage」を削除してソースコードを再コンパイルすると、結果のクラスファイルは正常に実行されます。
/testpackage$ cat Test.Java
//package testpackage;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("May I take your order?");
}
}
/testpackage$ javac Test.Java
/testpackage$ Java Test
May I take your order?
/testpackage$
コードまたは実行コマンドの何が問題になっていますか?私を助けてください。ありがとうございました。 :)
1つ上のディレクトリからコマンドを実行する必要があります。
パッケージfoo
のクラスは、ディレクトリfoo
に存在する必要があります。パッケージfoo.bar
はディレクトリfoo/bar
などにある必要があります。
したがって、構造には/path/to/code/testpackage/Test.Java
というファイルがあり、作業ディレクトリは/path/to/code
である必要があります。その後、以下を実行できます。
javac testpackage/Test.Java
Java -cp . testpackage.Test
そして、すべてが機能するはずです。
パッケージ名がある場合、完全に解決されたクラス名はtestpackage.Test
です。それがJava.exeが期待していることです。
現在のディレクトリとして「testpackage」を使用することはできません。あなたはそれをとして実行する必要があります
Java testpackage.Test
「testpackage」がサブディレクトリであるディレクトリから。