【发布时间】:2014-06-21 10:10:55
【问题描述】:
我无法从其他运行的 jar 加载资源。这是我的设置
resource.jar # contains resources I want to load
`-res/hwview/file1
engine.jar # my application which need resources
`-res/hwview/file2
有趣的是,使用下面的代码我可以加载 file2(在我运行的 jar 中),但不能加载 file1。
String dir = "res/hwview";
Enumeration<URL> e = getClass().getClassLoader().getResources(dir);
while(e.hasMoreElements()) {
// prints only file1 from engine.jar
// (actually it's in classes directory because I run it from my IDE)
System.out.println(e.nextElement());
}
[OUTPUT]
/path/to/my/project/SiHwViewUiModel/classes/res/hwview
所以我想也许这个 jar 没有被 ClassLoader 拾取,所以我打印了加载的内容
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for(URL url: urls){
System.out.println(url.getFile());
}
[OUTPUT]
/path/to/my/project/SiHwViewUiModel/classes/
/path/to/my/project/Resources/deploy/resources.jar
... and other not so important jars
有什么想法吗? 感谢您的帮助!
【问题讨论】:
-
@hd1 不确定,我没有内罐
-
同理,先生,您必须使用 Class.forName(class-within-resource-jar) 加载与该资源对应的 Class 对象,然后您可以使用它做您想做的事
标签: java jar classloader