为了账号安全,请及时绑定邮箱和手机立即绑定

如何使 ImageIcon 在所有平台上工作

如何使 ImageIcon 在所有平台上工作

皈依舞 2023-05-24 15:59:34
我制作了一个简单的用户界面,但是当我在 Mac 上运行相同的代码时,图像没有出现。我已经在 Windows 上试过了;它有效,但在 Mac 上却无效。我知道 File.separator,但在 ImageIcon 中它不应该是这种情况,因为相对路径正在转换为 URL,如果我没记错的话,URL 可以在所有平台上使用,因为它使用正斜杠。我真的很困惑为什么它不能在 Mac 上运行。    JLabel lblDesigniteLogo = new JLabel();    ImageIcon keyImage = new ImageIcon(this.getClass().getClassLoader().getResource("Images/designite_logo.png"));    lblDesigniteLogo.setIcon(keyImage);    GridBagConstraints gbc_lblDesignitelogo = new GridBagConstraints();    gbc_lblDesignitelogo.fill = GridBagConstraints.HORIZONTAL;    gbc_lblDesignitelogo.insets = new Insets(0, 0, 5, 0);    gbc_lblDesignitelogo.gridx = 2;    gbc_lblDesignitelogo.gridy = 0;    frame.getContentPane().add(lblDesigniteLogo, gbc_lblDesignitelogo);
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

问题实际上是由于图像的路径。从包中加载资源时,您的路径应以/. 而不是"Images/designite_logo.png",应该是"/Images/designite_logo.png"。当然,图像应该放在正确的包中。你可以自己测试一下:


public class Main {

    public static void main(String[] args) {

        URL imageUrl = Main.class.getResource("com/test/images/img.jpg");

        System.out.println(imageUrl == null); //Prints true


        imageUrl = Main.class.getResource("/com/test/images/img.jpg");

        System.out.println(imageUrl == null); //Prints false

    }

}

项目结构是:

//img1.sycdn.imooc.com//646dc3fa0001195602520128.jpg

查看完整回答
反对 回复 2023-05-24
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信