2016-09-15 98 views
-1

我試圖編譯並運行https://github.com/samet/Coursera-Algorithms-I-Assignment-1中的PercolationVisualizer。根據http://introcs.cs.princeton.edu/java/stdlib/,所需的依賴關係StdDraw.javaIn.java應出現在stdlib包中。即使添加了類路徑,也會發生Java NoClassDefFoundError

克隆庫後,我複製stdlib.jarsrc目錄,然後使用以下命令編譯PercolationVisualizer:

javac -cp .:stdlib.jar PercolationVisualizer.java 

(I做了同樣爲Percolation.java)。然而,當我嘗試運行使用java PercolationVisualizer程序,我得到以下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: In 
    at PercolationVisualizer.main(PercolationVisualizer.java:62) 
Caused by: java.lang.ClassNotFoundException: In 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 1 more 

我不明白的NoClassDefFoundErrorIn,因爲它應該包括在stdlib。誰能解釋這種行爲?

+1

嘗試打開jar並檢查類是否真的存在,如果存在,請檢查包是否與您使用的相同。 –

+1

'java -cp。:stdlib.jar PercolationVisualizer' –

+0

@ [Davide](http://stackoverflow.com/users/1803853/davide-lorenzo-marino):我用'jar xf stdlib.jar'打開了jar,並且裏面確實有一個'In.java'。 –

回答

2

如果您使用的是Windows,使用分號作爲CLASSPATH分離..

javac -cp ".;stdlib.jar" PercolationVisualizer.java Percolation.java WeightedQuickUnionUF.java PercolationStats.java 

如果你是在Linux/* nix中,使用冒號作爲CLASSPATH分離器...

javac -cp ".:stdlib.jar" PercolationVisualizer.java Percolation.java WeightedQuickUnionUF.java PercolationStats.java 

欲瞭解更多信息,請看here

如果要調試編譯過程,請使用「-verbose」標誌。它將顯示CLASSPATH,「lodaing jar_file ...」語句。如果它沒有識別你的jar文件,它現在將顯示「加載」語句。

+0

我在Linux上,所以冒號在這種情況下是正確的。 –

+0

@KurtPeek,我剛剛下載了你的代碼並進行了編譯。它使用分號語法在Windows上爲我編譯。 – blackpen

+0

@KurtPeek,如果它仍然不起作用,您可以嘗試將類路徑放入CLASSPATH環境變量中。 – blackpen

0

我終於將stdlib.jar解壓縮到工作目錄中,之後編譯工作。 (這實際上是第一種使用在http://introcs.cs.princeton.edu/java/stdlib/中描述的stdlib的方法)。

+0

創意!好。隨着需求的增加,您可以稍後嘗試替代方案。 – blackpen

相關問題