簡體   English   中英

Java類執行問題:java.lang.ClassNotFoundException

[英]Java class execution problem: 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$

我的代碼或執行命令有什么問題? 請幫我。 謝謝。 :)

您需要從更高的一個目錄運行命令。

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”是子目錄的目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM