我的计划的运作:
我正在使用从服务器下载的类解密。课程每次都会更改,每次我开始学习时都应该下载
它已经!在名为etc / etc / client / file.class的包中
当我在测试它时,它的工作完美无缺,导致包文件夹可以访问
但是,当我想要导出时,我该怎么做才能运行.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 :(得分:0)
您必须使用新的类加载器加载该类。
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
必须是接口,否则您的处理程序类必须从它继承。