我编写了一个 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;
}
建议?
最佳答案
您的第二个选项中的路径听起来错误。默认情况下,maven 应该将资源与编译的类一起放入目标/类中。 Jaring 应该接受所有这些,这就是为什么添加“/resources”对我来说听起来很奇怪。它应该在 testPicLoad.jar 中找到 gif!/com/cmy...
创建 jar 时您是否做了一些奇怪的事情?
关于Java w/maven : getting sources from a jar file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4943867/