web-dev-qa-db-ja.com

Javaクラス実行の問題:Java.lang.ClassNotFoundException

以下は、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$

コードまたは実行コマンドの何が問題になっていますか?私を助けてください。ありがとうございました。 :)

11
sky

1つ上のディレクトリからコマンドを実行する必要があります。

パッケージfooのクラスは、ディレクトリfooに存在する必要があります。パッケージfoo.barはディレクトリfoo/barなどにある必要があります。

したがって、構造には/path/to/code/testpackage/Test.Javaというファイルがあり、作業ディレクトリは/path/to/codeである必要があります。その後、以下を実行できます。

javac testpackage/Test.Java

Java -cp . testpackage.Test

そして、すべてが機能するはずです。

18
Cameron Skinner

パッケージ名がある場合、完全に解決されたクラス名はtestpackage.Testです。それがJava.exeが期待していることです。

0
duffymo

現在のディレクトリとして「testpackage」を使用することはできません。あなたはそれをとして実行する必要があります

Java testpackage.Test

「testpackage」がサブディレクトリであるディレクトリから。