我写了一个gui应用程序,并使用图像文件(gif)作为图标。当我在IDE中运行应用程序时 - 会出现图标。当我从jar运行它时 - 它们失败(资源上的空指针异常)
包结构如下:
代码:src / main / java / com / my / app
资源:src / main / resources / com / my / app
我写了这个小例子:
URL url ;
url = GuiUtils.class.getResource("/com/my/app/gui/fading_lines_blue_64x64.gif");
System.out.println("url: " + url);
url = GuiUtils.class.getResource("/resources/com/my/app/gui/fading_lines_blue_64x64.gif");
System.out.println("url: " + url);
从IDE运行时:
url: file:/C:/Repositories/V8/trunk/MyApp/build/com/my/app/gui/fading_lines_blue_64x64.gif
url: null
从Jar开始:
url:null
url:jar:file:/C:/DevEnv/Projects/Viewer/testPicLoad.jar!/resources/com/cmy/app/gui/fading_lines_blue_64x64.gif
我这样解决了,但显然不是正确的方法:
public static URL getResourceURL(String path) {
URL url = GuiUtils.class.getResource(path);
if (url == null) {
url = GuiUtils.class.getResource("/resources"+path);
}
return url;
}
建议?
答案 0 :(得分:4)
第二个选项中的路径听起来不对。默认情况下,maven应该将资源与编译的类一起放入目标/类中。 Jaring应该采取所有这些,这就是为什么添加“/资源”听起来很奇怪。应该在testPicLoad.jar中找到gif!/ com / cmy ...
创建jar时,你是在做些奇怪的事吗?
答案 1 :(得分:1)
它发生的原因是因为我用eclipse来装罐子。我不知道为什么,但它就这样打包了。当我从命令行使用maven时,一切都很顺利。