我想显示另一个图标,而不是通常的java加载图标。我把它放到这个文件夹中:
我想通过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()
没有从我的文件夹中加载我的图片?感谢你的回答!
答案 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")));