2010-02-18 44 views
2

我試圖運行我編譯的java prog,但我想從特定目錄運行它。當指定要運行的類文件的相對路徑時,該路徑包含一個帶有句點的目錄,並且它似乎在跳閘java up;因此,例如我嘗試運行:當在目錄名稱中存在句點時運行Java.exe

java -classpath myPath/myPath-1.2.3/myLongPath myPath/myPath-1.2.3/myLongPath/myProg 

Java錯誤,說它找不到類(NoClassDefFoundError);這是有道理的,因爲我看到java正在查看與我指定的目錄不同的目錄;它是在尋找: mypath中/ mypath中-1/2/3/myLongPath 代替: mypath中/ mypath中-1.2.3/myLongPath

嘗試,因爲我可能,我無法弄清楚如何指定爲Java。 exe文件,我希望它的目錄包含句點。我試圖逃避這段時間,但這並沒有幫助。任何人都遇到過這個問題?順便說一句,我在Linux內運行gnome終端。謝謝你的幫助。

回答

6

調用java中的最後一個參數是要運行的類的名稱。這不是文件名,而是類名。它包括完整的軟件包名稱(除非該類是在默認軟件包中),以點分隔(不是斜槓)。類名和任何包名都不能包含點。代表包路徑的文件夾不能包含在類路徑中包含的目錄中(只有類文件夾的頂層目錄應該在那裏)。

在你的情況,這似乎只是myProg,但要確定,類的名稱(包括包名稱)與主要方法是什麼?

實施例:

如果我有一個類mypackage.mysubpackage.MainClass,以及類文件是在/home/me/project/1.3/build/mypackage/mysubpackage/MainClass.class,然後運行類將是java -cp /home/me/project/1.3/build mypackage.mysubpackage.MainClass該命令。

+1

謝謝,你給的例子幫助我弄清楚我做錯了什麼。所以命令應該是: java -classpath myPath/myPath-1.2.3/myLongPath myProg 現在我看到包路徑中永遠不會有句點,這就是爲什麼我永遠不會遇到period-in-package-只要我正確指定我的包路徑,就可以解決這個問題。 – lomilomi26 2010-02-19 01:08:54

1

Java使用句點作爲包分量分隔符,所以它不能出現在類名中。由於類名與目錄結構綁定,因此它不能出現在類路徑中使用的目錄名中,並且沒有任何轉義會幫助您。 (使用目錄分隔符本身作爲包組件分隔符會更好,但是它們在操作系統之間有所不同,而Java希望與操作系統無關,這是要支付的價格之一。)

+0

點可以出現在類路徑中,在那裏沒有問題。它不能存在於包名中,即它不能位於類路徑位置內的目錄*中。 – 2010-02-18 09:11:26

相關問題