Java:尝试设置应用程序图标时出现空指针

时间:2014-09-12 00:52:39

标签: java nullpointerexception icons

我正在尝试为我的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)

任何帮助将不胜感激!

2 个答案:

答案 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将位于类路径的根目录下,您可以使用上面的代码检索它。