2010-09-27 84 views
0

我在Arch Linux上,我剛剛安裝了JRE和JDK,並且所有正確的bin文件(javac和java)都在/ opt/java/bin/無法運行簡單的編譯java程序?

我簡單地編譯了一個標準hello world, javac正在運行javac ./hello.java並且創建了一個類。

現在我的問題是運行它。我運行java ./helloworld.class和它給我一個錯誤,即使文件我點Java中是不存在的:

Exception in thread "main" java.lang.NoClassDefFoundError: //helloworld/class 
Caused by: java.lang.ClassNotFoundException: ..helloworld.class 
(..omitted for clarity..) 
Could not find the main class: ./helloworld.class. Program will exit. 

你會發現錯誤的第一線,它munges路徑//helloworld/class

當我喂java的絕對路徑,即java /home/foo/helloworld.class它給出了同樣的錯誤,但替代路徑的/.在第一線,再次被改寫的。

你認爲什麼是錯的?我真的不知道爲什麼它是這樣做的..

回答

3

當你運行java,你只需將它傳遞的完全合格的類名(包括包),而不是文件名。

java helloworld將尋找helloworld.class。

java helloworld.class將尋找的HelloWorld/class.class

+0

啊..完美的,這解釋了一切。 – John 2010-09-27 17:27:15

1

你不運行文件 # java file.class 可以將其作爲 # javac PATH/file.java # java PATH/file

而使用JAVA命令不添加的.class。

1

其實你應該編譯它像這樣

javac helloword.java 

運行程序

java helloword 
0

然而另一件事:添加命令行選項 「-classpath」。或者它的簡短版本爲「-cp。」,即您的命令行應如下所示: java -cp。的HelloWorld

這是如果你的類是在當前目錄。除此以外 」。」應該被可能找到類的路徑所取代。