2011-07-06 22 views
-1

我有以下代碼爲什麼如果cp不以冒號結尾,class.getClassLoader()會拋出空指針?

public static void main(String args[]) throws Exception { 
ClassLoader sysClassLoader = Thread.currentThread().getContextClassLoader(); 

URL[] urls = ((URLClassLoader)sysClassLoader).getURLs(); 
    String cp = ""; 
    for(int i=0; i< urls.length; i++) 
    { 
     String ffile = (String) urls[i].getFile(); 
    } 
} 

和類編譯很好 - 但這是STANGE。如果我啓動類這種方式,我抓住一個空指針:

java -cp "foo.jar" FileUtils 
Exception in thread "main" java.lang.NoClassDefFoundError: FileUtils 

但是,當我啓動它這一切的辦法是罰款:

java -cp "foo.jar:" FileUtils 
File:/home/u/wzhkit/java/foo.jar 

這是爲什麼,我該如何解決這個得到什麼?

謝謝, 克里斯

+1

這是不是因爲你的代碼做什麼;它根本找不到執行它的主類。根本沒有空指針。 – SJuan76

+0

不需要路徑值附近的引號。 Char:是Linux下的路徑分隔符。 – 01es

+1

我看到一個'NoClassDefFoundError',你在哪裏發現'NullPointerException'? (或者它是你的問題中的拼寫錯誤?) –

回答

2

這有點出乎意料。

我懷疑發生了什麼,java在您的JAR文件中找不到FileUtils類。相反,我懷疑它是在當前目錄中找到它,因爲java命令正在將空類路徑條目解釋爲表示當前目錄。

這是意想不到的,因爲根據online documentation,應該使用「。」引用當前目錄。


(注:這只是一種理論......)

+0

我的理論也是這樣...我沒有發現關於* empty classpath entries *的註釋神聖的頁面... –

相關問題