2013-01-07 68 views
1

文件FactoryDemo.java編譯成功,並在它存在的運行Java程序時,報告無法找到類

package home.city.Desktop.factorydemo; 

我用javac -d/FactoryDemo.java並沒有錯報道編譯。

但是當我嘗試使用java home.city.Desktop.factorydemo.FactoryDemo來運行它,它會報告:

Exception in thread "main" java.lang.NoClassDefFoundError: home/city/Desktop/factorydemo/FactoryDemo 
Caused by: java.lang.ClassNotFoundException: home.city.Desktop.factorydemo.FactoryDemo 
    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: home.city.Desktop.factorydemo.FactoryDemo. Program will exit. 

我已經嘗試了很多次,但我找不到解決問題的辦法。感謝您的幫助提前。

+0

實際上是否有該文件中的主類? – Woot4Moo

回答

1

你編譯的類必須在一個名爲目錄: home/city/Desktop/factorydemo

在Unix上,只要運行這個: mkdir -p home/city/Desktop/factorydemo; mv FactoryDemo.class home/city/Desktop/factorydemo/

最佳做法,只是該文件夾中也將您的Java源文件,使編譯器將文件輸出到正確的位置。

+0

你不需要手動創建目錄,「javac -d」命令自動創建它們。 –

+0

@ mmc18,你是對的......但你知道它在運行時報告異常的原因嗎? – city

+0

Yeap,找不到類,因爲jvm在當前目錄中搜索類。因此你必須指出Class文件的正確路徑。我的意思是根目錄必須位於classpath中。 –

1

FactoryDe​​mo類是根目錄下創建的,應鍵入以下命令(而不是/)

javac -d . FactoryDemo.java 

它創建home.city.Desktop.factorydemo目錄從當前目錄開始。

如果你想在根目錄下創建類。您必須輸入以下命令才能執行。

java -classpath/home.city.Desktop.factorydemo.FactoryDemo 
+0

其實,我想在根目錄下創建目錄,而不是當前目錄.... – city

+1

我已經編輯了答案,它應該可以解決你的問題。 –

+0

非常感謝!你的回答可以幫助我很多! – city