java - 使用其他本地包中的图像时出现问题

标签 java swing jlabel

我在框架中有一个 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/

相关文章:

java - JPanel自定义背景

Java:沿圆形路径移动标签

java - 为什么 JLabel 实例只显示 8 行?

Java 对象数组 Foreach 方法访问

java - jsp 页面的 Doxygen?

java - 为什么我的 Java 9 模块服务没有注册其实现?

java - Spring/Struts 2 配置 - 有傻瓜指南吗?

Java Swing 小程序 : How to slow or delay paint() without slowing down the entire program

java - 想要 Java 代码创建 OMR Sheet Reader

Java 图像不显示?