[英]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.