javax.imageio.ImageIO - 无法将图标加载到 JFrame

标签 java swing imageicon javax.imageio

在下面的代码片段中,我尝试使用 javax.imageio.ImageIO 设置我的 JFrame 实例的图标,但出现以下异常。你能告诉我我缺少什么吗?

    import javax.imageio.ImageIO;
    ......
    BufferedImage image = null;
    try {
    //EXCEPTION IS thrown in the following line
        image = ImageIO.read(this.getClass().getResource("resources/Smartbook_icon.ico")); 
    } catch (IOException e) {
       ......
    }
    this.setIconImage(image);

异常堆栈跟踪

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException:  input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1362)
at se.websiter.bookingapp.UI.MainFrame.setGUIIcon(MainFrame.java:4131)
at se.websiter.bookingapp.UI.MainFrame.<init>(MainFrame.java:59)
at se.websiter.bookingapp.UI.MainFrame$60.run(MainFrame.java:4167)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

最佳答案

可能是资源路径不正确。 我总是使用以下代码片段来设置 JFrame 的图标图像,假设 resources 是类包的子目录:

import java.net.URL;

// Setting window's icon
String resourcePathToIcon = String.format("/%s/resources/myicon.png",
        MyClass.class.getPackage().getName().replace('.', '/'));
URL windowIconURL = MyClass.class.getResource(resourcePathToIcon);
if (windowIconURL != null)
    setIconImage(new ImageIcon(windowIconURL).getImage());

请注意,资源图像的路径以 / 开头。

关于javax.imageio.ImageIO - 无法将图标加载到 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113645/

相关文章:

java - 图形程序适用于 Windows,但不适用于 Mac

java - 更改 jLabel 图标

java - 显示来自另一个树表的更新树表值

java - Spark java嵌入式Jetty内部并发

java - 将复选框状态从 XML 传递到 Java

java - 关于 InetAdress.getByName() 的困惑

java - 如何使用 jtextfield 值填充 jtable

java - 在 JLabel 的 ImageIcon 上做标记

java - 使用 JFileChooser 在 JPanel 中加载图像

java - 如何创建自己的 Open ID 连接授权服务器