2013-06-21 74 views
1

我有多個編譯的Java類文件,來自目錄中的各種軟件包,就像這樣。Java URLClassloder掛起

C:/classes/package/A.class

C:/classes/package/B.class

C:/classes/package/subpackage/C.class

C:/classes/package/subpackage/D.class

我試圖加載它們使用URLClassloader像這樣。

URLClassloder classloader = new URLClassLoader(new URL[]{new File("C:/classes/").toURI().toURL()}); 
System.out.println("Loading classes..."); 
classloader.loadClass("package.A"); 
classloader.loadClass("package.B"); 
classloader.loadClass("package.subpackage.C"); 
classloader.loadClass("package.subpackage.D"); 
System.out.println("Loaded classes."); 

此代碼,直到我嘗試加載「package.subpackage.D」運行良好。該程序永久掛起。

更改加載類的順序沒有效果,但經過大量實驗後,我發現任何擴展本機類的類都會導致這樣的掛起,「本機」指的是運行時中已經存在的所有類。

因此,這裏是我的問題:

這是在運行時加載類的正確方法嗎?

問題有解決嗎?

謝謝您的時間。

+0

快速'jstack'或^ Z/^中斷應顯示掛起的位置。 –

+0

我已經知道掛起發生的位置,並發現擴展本機類和掛起之間的關聯;有沒有關於這方面的任何文件? – Terra

+0

我的意思是在執行的地方。 –

回答

1

URLClassLoader需要它知道如何加載JDK類父。父裝載機應該可以從上下文中借用,即:

new URLClassLoader(urls, this.getClass().getClassLoader()) 

參見URLClassLoader(URL[], ClassLoader)

+0

非常感謝。 :) – Terra