2012-03-25 31 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