2015-09-26 79 views
0

我想加載一個動態類的列表。 例如我在目錄/ hereAreMyClasses: class1.class class2.class class3.class如何讓Java從另一個包中加載導入的類?

遍歷這些類有一個ClassLoader,並加載它們工作得很好。

現在的問題是,這些類之一(比方說,class2)從另一個位置/另一個包中導入一些類。

import other.package.someClass; 

public class class2 { 
    //stuff 
} 

能正常工作的編譯時間,但是當我運行該程序,我得到了SomeClass的一個NoClassDefFoundError的時候我打電話

Class<?> clazz = clazzLoader.loadClass("class2"); 

我如何得到的ClassLoader還加載所需的進口類?

編輯

問題解決了,感謝我注意到了,叫我的程序時,我缺少的類路徑清晰的答案。

+0

的'import'說法只是針對範圍界定編譯時間的概念。它對程序沒有運行時間影響。 –

+0

導入不會執行任何操作,除非保存輸入。人們經常將它與類加載混淆。這不是它在做什麼。 – duffymo

回答

-1

在查看此解決方案之前,請嘗試自行完成。內森已經告訴了正確的事情。

您必須在編譯和執行Java代碼時將其他目錄添加到類路徑中。一個簡單的例子是這樣的:

文件夾1:

directory1/SourceCode1.java 

文件夾2:

directory2/com/dir2/SourceCode2.class 

假設SourceCode1.java具有如com.dir1包名:

package com.dir1; 

import com.dir2.SourceCode2; 

public class SourceCode1 { 
    public static void main(String[] args) { 
     //SourceCode2 used in this class 
    } 
} 

然後編譯和執行時,必須使用-cp命令,它告訴編譯器和解釋器在指定的位置找到類路徑。

雖然編譯:

javac -d . -cp .:<directory2 path> SourceCode1.java 

在執行:

java -cp .:<directory2 path> com.dir1.SourceCode1 
+0

根據它自己的package語句,'SourceCode1.java'在錯誤的目錄中。 – EJP

+0

SourceCode1.java不在錯誤的目錄中。編譯時的目錄與包名無關。這只是演示文件的位置以及如何理解它們的路徑和執行。 – Vishal

相關問題