可能重复:
使用自定义类加载器加载资源包
我制作了一个自定义类加载器,它从我的网站下载一个 jar,然后运行它。问题是:我的(下载的)jar 需要一些资源,例如 png 图像等...
如果我直接在命令提示符下运行我的(下载的)jar,它就可以工作。资源是这样加载的:
getClass().getResource("/images/logo.png")
现在,如果我使用自定义类加载器运行它,请使用:
Class<?> c = classLoader.loadClass("MainClass");
c.getMethod("main", new Class[] { java.lang.String[].class}).invoke(null, new Object[]{new String[] {"arg1_goes_here"}});
我得到一个空异常,因为它无法加载资源。
当我将 jar 文件加载到内存中时,我会执行以下操作:
String name = entry.getName();
if(name.endsWith(".class")) {
name = name.substring(0, name.length() - 6).replace('/', '.');
classbytes = getResourceData(input);
classes.put(name, classbytes);
} else {
classbytes = getResourceData(input);
if (name.charAt(0) != '/') {
name = "/" + name;
}
resources.put(name, classbytes);
}
我正在使用以下方法加载我的课程:
defineClass(classToLoad, buffer, 0, buffer.length, null);
其中buffer
是包含代码的字节数组。
所以我的问题如下:Java中有一种defineResource()吗?
谢谢。