【问题标题】:Problem in adding Icon to a JFrame将图标添加到 JFrame 时出现问题
【发布时间】:2011-07-20 06:49:05
【问题描述】:

我尝试了几种方法来将图标添加到 JFrame。当我使用源代码运行它时,每种方法都能完美运行。

例如:

jframe.setIconImage(Toolkit.getDefaultToolkit().getImage("iconimages/icon.png"));

但是当我使用 jar 文件运行它时,它们都不起作用。我知道问题出在图像文件的路径上。我该如何解决这个问题?

编辑:

public Ui() { 
   initComponents(); 
   setLocationRelativeTo(null); 
   this.setIconImage(getImageIcon("icon.png").getImage());
} 

private ImageIcon getImageIcon(String fileName) {
   String imageDirectory = "iconimages/"; 
   imgURL = getClass().getResource(imageDirectory + fileName); 
   return new ImageIcon(imgURL); 
}

我试过了,但现在我得到一个空指针异常。

--------------------------------------------------------------------------------

编辑[解决方案]:我找到了解决方案。

我在路径中额外添加了../,它运行良好!!! :D

 ImageIcon imageIcon = new ImageIcon("../imageicons/icon.png");
 this.setIconImage(imageIcon.getImage());

感谢大家尝试帮助我。 :)

【问题讨论】:

  • 这种将String 传递给ImageIcon 构造函数的方法在图像在Jar 中时不起作用(因为它可能在分发时会如此)。 paranoid-android 几天前提供了正确的技术。最好弄清楚如何使它适用于您的项目结构。

标签: java swing icons jframe imageicon


【解决方案1】:

您应该使用 URL。像这样:

 /**
  * Loads and returns an {@link Image} resource. 
  * @param fileName name of the image resource.
  * @return Image as resource.
  */
  public Image getResourceImage(String fileName) {
      String imageDirectory = "images/";
      URL imgURL = getClass().getResource(imageDirectory + fileName);
      Image image = null;
      try {
         image = ImageIO.read(imgURL);
       } catch (IOException e) {}
      return image;
    }

【讨论】:

  • 例如,在我的 jar 中,我有一个名为“images”的文件夹。如果您的图像都在 jar 的根目录中,则不需要 imageDirectory 字符串。
  • 再看看我的回答。我给了你一个 ImageIcon 的加载器方法,而不是一个 Image - 所以我修复了它,以便它加载一个 Image。在注释中使用代码时使用 ` 和缩进。 :)
  • @Bhathiya 请使用新代码更新您的问题(编辑它),而不是在评论中发布代码。它变得一团糟!
  • 如果您得到一个空指针,请在返回图像之前尝试System.out.println(imgURL);。如果 URL 为空,请仔细查看您的文件所在的位置以及您要查找的位置。
  • +1 用于编辑您的答案。我已经删除了现在是噪音的评论。 :)
猜你喜欢
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多