我在框架中有一个 JLabel,我希望在点击不同的按钮时有不同的图像。实现这一点很容易。这是代码
ImageIcon icon = new ImageIcon (img);
icon.getImage().flush();
shopBanner.setIcon(icon);
问题 i0,s 早些时候我提供了图像的完整路径,如 C:\Documents\xxx。 现在,当我在其他计算机上尝试这个 jar 时,我注意到图像没有被使用,这是显而易见的,因为分配的路径在其他计算机上不存在。
回到项目,我有 2 个包,一个用于名为 images 的图像,另一个用于名为 smartshopping 的源文件。我尝试使用一些代码,但无法从“图像”包中调用图像。请帮我解决这个问题。如果我提供 C:/Docs 的完整路径,该项目在“我的”计算机上工作正常....
这是代码
Image img = ImageIO.read(getClass().getResource("images/bb-banner-main.jpg"));
ImageIcon icon = new ImageIcon (img);
icon.getImage().flush();
shopBanner.setIcon(icon);
我试过了
URL img= this.getClass().getResource("images/icon.png");
ImageIcon imageIcon = new ImageIcon(img);
//icon.getImage().flush();
shopBanner.setIcon(imageIcon);
目前没有任何效果。我究竟做错了什么。图片的包名为images。
最佳答案
Foo.class.getResource("images/icon.png")
将 images/icon.png
视为 Foo.class
的相对路径。因此,如果 Foo
在包 com.bar
中,它将查找 com/bar/images/icon.png
。
在路径的开头放置一个斜杠以使其成为绝对路径(即从类路径的根开始)。
顺便说一句,你让它变得不必要的复杂。无需使用 ImageIO 读取图像或刷新图像。就这样
ImageIcon icon = new ImageIcon(Foo.class.getResource("/images/icon.png"));
注意:我更喜欢对 Foo.class 进行硬编码,而不是使用 getClass()
,因为 getClass()
如果被子类调用,将返回另一个类,而相对因此,路径将指向另一个位置,在大多数情况下,这不是我们想要的。
关于java - 使用其他本地包中的图像时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7049192/