首页 > 解决方案 > 无法使用 createIcon() 方法获取图像的路径(url)

问题描述

因此,当我尝试使用createIcon()在按钮类中声明的方法将图标放在按钮上时,它可以正常工作。

但,

当我尝试将方法放在另一个类中(比如Utils.java),这样我就不需要在对象需要图标的类中重新声明方法时,我会收到此消息。

无法加载图像:/images/Save16.gif
线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException:无法调用“java.net.URL.toExternalForm()”,因为“位置”为空

*如果需要,还有更多信息

这是按钮的类,里面有 createIcon() 方法

public class Toolbar extends JToolBar implements ActionListener{
   private final JButton saveBtn;
   
   public Toolbar() {
      saveBtn = new JButton();

      saveBtn.setIcon(createIcon("/images/Save16.gif"));

      saveBtn.setToolTipText("Save");
      saveBtn.addActionListener(this);
      add(saveBtn);
   }

   private ImageIcon createIcon(String path) { 
      URL url = getClass().getResource(path);
    
      if(url == null) {
         System.err.println("Unable to load image: " + path);
      }
    
      ImageIcon icon = new ImageIcon(url);
    
      return icon;
  }
}

这是我试图在另一个类中声明的 createIcon() 方法

public class Utils {
    public static ImageIcon createIcon(String path) {
        URL url = System.class.getResource(path);

        if(url == null) {
                System.err.println("Unable to load image: " + path);
        }

        ImageIcon icon = new ImageIcon(url);

        return icon;
    }
}

setIcon()方法更改为:

saveBtn.setIcon(Utils.createIcon("/images/Save16.gif"));

从我在消息中分析的内容来看,问题可能是url无法path从我的按钮类中获取,我尝试了几种替代方法,但仍然没有用。我应该如何正确设置它?谢谢

标签: javaswingembedded-resourceimageicon

解决方案


这有效:

URL url = getClass().getResource(path);

因为您获得了 Toolbar 类的类,这是所有其他类/文件所在的位置。

这不起作用:

URL url = System.class.getResource(path);

因为在 JDK 中找到了“系统”类,而不是在您的应用程序类中。

我猜你可以试试:

URL url = Utils.class.getResource(path);

推荐阅读