无法显示图标 - 获取图像时未捕获错误

时间:2014-08-20 07:22:20

标签: java swing nullpointerexception icons embedded-resource

我想显示另一个图标,而不是通常的java加载图标。我把它放到这个文件夹中:

enter image description here

我想通过getResource()方法加载它。

setIconImage(Toolkit.getDefaultToolkit().getImage(MainWindow.class.getResource("house.png")));

然而,我得到了:

Uncaught error fetching image:
java.lang.NullPointerException
    at sun.awt.image.URLImageSource.getConnection(Unknown Source)
    at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
    at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
    at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    at sun.awt.image.ImageFetcher.run(Unknown Source)

为什么getResource()没有从我的文件夹中加载我的图片?感谢你的回答!

3 个答案:

答案 0 :(得分:2)

只是为了解释为什么@MadProgrammer的评论("/house.png")有效:

你正在使用maven。 src/main/resources中的文件成为类路径上的资源。最终放置在类路径的根目录下, main/resources。所以你的直觉是正确的,最初只是使用"house.png"作为路径,因为图像在根部。

您未能考虑的是电话来自哪里。当您使用Class.getResource时,调用将从类的位置开始搜索,即调用类所在的包。例如,如果您有类似

的内容
src
   main
       resources
               house.png
   main
       java
           com
              mypackage
                      CallingClass.class

搜索将在com/mypackage。因此,要使此路径("house.png")起作用,图像必须位于com/mypackage包中,但事实并非如此。它在根源中。

这使我们进入正斜线/。正斜杠最终的作用是使搜索从类路径的根开始。所以使用正斜杠("/house.png"),搜索src/main/resources中找到最终位于类路径根目录中的图像。< / p>

答案 1 :(得分:0)

使用以下内容:

setIconImage( Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("house.png")));

setIconImage( Toolkit.getDefaultToolkit().getImage(MainWindow.class.getClassLoader().getResource("house.png")));

答案 2 :(得分:0)

Для того чтобы и сборка была корректная, можно использовать вот это:

ImageIcon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(this.getClass().getResource("logo.png")));