使用newInstance从网站加载Java类?

时间:2012-03-25 16:49:09

标签: java

我的计划的运作:

  1. 连接到服务器
  2. 获取字符串
  3. 解密字符串
  4. 发送回来
  5. 我正在使用从服务器下载的类解密。课程每次都会更改,每次我开始学习时都应该下载

    它已经!在名为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

    时使其工作

1 个答案:

答案 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必须是接口,否则您的处理程序类必须从它继承。