2012-12-21 18 views
3

我在使用Java加載類時遇到了一些問題。在我的項目中,我試圖從任何地方動態地加載一個類。然而,我目前沒有加載硬編碼的代碼,並且在6個小時的谷歌搜索和堆棧溢出檢查後仍然無能爲力。從任意位置加載自定義類

我懷疑是我加載的類的包名有問題。 我的目標是在項目/ resources/dynamicFolderNonInClassPath/loadThis目錄中加載類LoadAClass.java。因爲我是我的URLClassLoader上面設置該文件夾,但我不斷收到一類未發現異常的包已經被設置爲

package loadThis; 

public class LoadAClass{ 
static{ 
System.out.println("I am loaded"); 
} 

(...) 
} 

File file = new File("C:/Users/Robert/Documents/workspace/project/resources/dynamicFolderNonInClassPath/"); 
if (!file.exists()) System.out.println("typo!"); //debug print 
URL url = file.toURI().toURL(); 
URLClassLoader loader = new URLClassLoader(new URL[]{url}); 
String classToBeLoaded = "loadThis.LoadAClass"; 

Class classy = loader.loadClass(classToBeLoaded); 
System.out.println(classy.getCanonicalName()); //debug print 

我曾嘗試不同的組合,就像直接設置的URLClassLoader文件或給予充分/資源/ dynamicFolderNonInClassPath/loadThis作爲URL但怎麼至今沒有成功。

有人在聖誕節的心情和看到問題?我對這個功能似乎存在一些誤解,我希望看到它被修復。

回答

1

你缺少一個斜槓「/」

File file = new File("C:/Users/Robert/Documents/workspace/project/resources/dynamicFolderNonInClassPath"); 
if (!file.exists()) System.out.println("typo!"); //debug print 
URL url = new URL("C:/Users/Robert/Documents/workspace/project/resources/dynamicFolderNonInClassPath/"); 
URLClassLoader loader = new URLClassLoader(new URL[]{url}); 
String classToBeLoaded = "loadThis.LoadAClass"; 

Class classy = loader.loadClass(classToBeLoaded); 
System.out.println(classy.getCanonicalName()); //debug print 

見第三行

+0

只是修復,仍然無法正常工作... – user1922672

+0

你確定文件dynamicFolderNonInClassPath/loadThis/LoadAClass.class存在? – Subin

+0

也打印出loader.getUrls() – Subin

1

.java文件不是類文件。你編譯了它嗎?您需要在「loadThis」目錄中加載LoadAClass.class文件,並將類加載器指向包含「loadThis」的目錄。

+0

應該在URL類加載器能夠加載「的.java」文件?據我所知,它編譯這樣的文件。 – user1922672

+0

不,ClassLoader的名稱如此。它加載類。它不是一個編譯器。 –

+0

它是一個類加載器,它加載.class文件:-) – Subin

相關問題