【问题标题】:Null pointer when setIconImage() [duplicate]setIconImage()时的空指针[重复]
【发布时间】:2016-08-20 12:42:40
【问题描述】:

我正在尝试更改我的 Java 应用程序的图标。 这是我的项目的结构:

src
   gui
      FileCopyManager.java
images
    folder.png

现在我有以下代码:

public class FileCopyManager extends JFrame{
    public void changeIcon() {
        this.setIconImage(new ImageIcon(Toolkit.getDefaultToolkit()
                .getClass().getResource("../../images/folder.png")).getImage());
    }
    public FileCopyManager() {
        changeIcon();
        this.setSize(800,600);
        this.setVisible(true);
    }
    public static void main() {
        new SwingUtilities.invokeLater(()->{
            new FileCopyManager();
        });
    }
}

但是,当我尝试运行此代码时,我在 this.setIcon 行。

有什么想法吗?

【问题讨论】:

  • 通过使用中间变量和/或使用调试器将行拆分为更多行。您可能还应该在使用它之前确保资源存在,如果不存在则抛出异常。
  • 在 SO 搜索中搜索 classloader.getresource
  • getResource() 可能返回 null。资源路径错误。试试“/images/folder.png”
  • getResource("../../images/folder.png") 返回 null 的概率为 99%,因为相对路径与您认为的位置无关,或者文件未部署在您认为的位置,或者文件不存在。

标签: java swing nullpointerexception jframe embedded-resource


【解决方案1】:

我建议将您的图像文件夹移动到/src 文件夹并用作:

src
 |---gui
 |  |-FileCopyManager.java
 |---images
    |-folder.png

用作:

public void changeIcon() {
    setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("images/folder.png")));
}

您还可以创建一个从系统获取图像的方法并将其放置:

protected static Image createImage(String path, String description) {
    URL imageURL = Main.class.getResource(path);         
    if (imageURL == null) {
        System.err.println("Resource not found: " + path);
        return null;
    } else {
        return (new ImageIcon(imageURL, description)).getImage();
    }
}

在构造函数中用作:

setIconImage(createImage("/images/folder.png", "icon"));

【讨论】:

  • 这样做还是不行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2019-04-07
  • 2011-03-26
  • 2011-12-21
  • 2014-02-04
相关资源
最近更新 更多