11

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

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

4

3 に答える 3

18

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

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

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

javac testpackage/Test.java

java -cp . testpackage.Test

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

于 2011-03-27T01:55:18.127 に答える
0

パッケージ名がある場合、完全に解決されたクラス名はtestpackage.Testです。これは、java.exeが期待するものです。

于 2011-03-27T01:54:31.403 に答える
0

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

java testpackage.Test

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

于 2011-03-27T01:56:17.417 に答える