我正在尝试为我的Java应用设置一个图标,图像位于资源/图像中。
如此设置:
java.net.URL url = ClassLoader.getSystemResource("assets/images/ravens.jpg");
Toolkit kit = Toolkit.getDefaultToolkit();
Image img = kit.createImage(url);
frame.setIconImage(img);
我收到错误:
Uncaught error fetching image:
java.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:115)
at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:125)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
任何帮助将不胜感激!
答案 0 :(得分:2)
有一种更好的方法可以在不使用NullPointerException
获取BufferedImage
的情况下执行此操作。我已经测试了这个并且它有效。用以下代码替换您的代码:
BufferedImage img = null;
try {
img = ImageIO.read(new File("assets/images/ravens.jpg"));
} catch (IOException e) {}
frame.setIconImage(img);
答案 1 :(得分:0)
根据您在评论中说明的内容,您的assets
目录与src
处于同一级别,例如
/project
/src
/assets
你需要做什么才能做到这一点
java.net.URL url = ClassLoader.getSystemResource("assets/images/ravens.jpg");
工作是让assets/images/ravens.jpg
在类路径上。
Eclipse在运行应用程序时将任何内容放在类路径根目录下的源文件夹中。
因此,创建一个文件夹resources
(或任何您想要调用的文件夹),将其设为源文件夹,并将assets
放入其中。它应该看起来像
/project
/src
/resources
/assets
/...
现在,assets
将位于类路径的根目录下,您可以使用上面的代码检索它。