2012-03-25 46 views
0

我的程序的運作:用newInstance從網站加載Java類?

  1. 連接到服務器
  2. 獲取字符串
  3. 解密字符串
  4. 發回

我帶班,我從下載的解密服務器。班級每次更換,每次開始我的程序時應下載

它有!要在指定包等的/ etc /客戶/ file.class

它,當我測試它在Eclipse中引起包文件夾的作品完美無瑕然後入店

可是我該怎麼辦時,我想導出是可運行的.jar?然後我不能在包文件夾中寫入?

與加載的類行: (該類擴展的Base64這已經是該文件夾中)

etc.sec.client.Base64 decode = (etc.sec.client.Base64)Class.forName("etc.sec.client." + handlerClass).newInstance(); 
// Handler class is the name of the class 

加載newInstance()之前,我要自行下載的類文件夾:

bin/etc/sec/client/"+filename+".class 

在eclipse中完美工作,但我不知道如何使它在導出到.jar時能夠正常工作

回答

0

您將不得不加載clas s使用一個新的類加載器。

public void go() throws Exception { 
    ClassLoader cl = new URLClassLoader(new URL[] { new URL("file:///home/ben/") }, this.getClass().getClassLoader()); 
    Class decoderclass = cl.loadClass("etc.sec.client." + handlerClass); 
    etc.sec.client.Base64 decode = (etc.sec.client.Base64)decoderclass.newInstance(); 
    System.out.println(decode.toString()); 
} 

如果下載類分爲:

/home/ben/etc/sec/client/ 

這應該實例化類的罰款。當然,你將不得不在編譯時使用可用的接口,etc.sec.client.Base64必須是一個接口或者你的處理器類必須從它繼承。

+0

非常感謝你;) – 2012-03-25 17:22:03

+0

這個問題有一個很好的加載器實現,你應該看看:[鏈接](http://stackoverflow.com/questions/3580752/java-dynamically-loading-a-class) – tribeca 2012-03-25 17:59:24