使用newInstance从网站加载Java类?

使用newInstance从网站加载Java类?,java,Java,我的程序的工作方式: 连接到服务器 获取字符串 解密字符串 寄回去 我正在使用从服务器下载的类进行解密。该类每次都会更改,并且应该在每次启动程序时下载 是的!在名为etc/etc/client/file.class的包中 当我在eclipse中测试它时,它工作得完美无缺,因为包文件夹是可以访问的 但是当我想导出为runnable.jar时,我该怎么做呢?那我就不能在文件夹里写东西了 加载类的行: (该类扩展了已在文件夹中的Base64) 加载newInstance()之前,我正在将类下载到的文件

我的程序的工作方式:

  • 连接到服务器
  • 获取字符串
  • 解密字符串
  • 寄回去
  • 我正在使用从服务器下载的类进行解密。该类每次都会更改,并且应该在每次启动程序时下载

    是的!在名为etc/etc/client/file.class的包中

    当我在eclipse中测试它时,它工作得完美无缺,因为包文件夹是可以访问的

    但是当我想导出为runnable.jar时,我该怎么做呢?那我就不能在文件夹里写东西了

    加载类的行: (该类扩展了已在文件夹中的Base64)

    加载
    newInstance()
    之前,我正在将类下载到的文件夹:


    在eclipse中工作得非常完美,但我不知道如何在导出到.jar时使其工作

    您必须使用新的类加载器加载该类

    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必须是一个接口,或者您的处理程序类必须从中继承。

    这个问题有一个很好的加载程序实现,您应该看看:
    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/