使用createAndShowGUI()方法时如何为JFrame设置图标?

3

我正在使用createAndShowGUI()方法创建一个JFrame。我想设置一个图标,但是当我在NetBeans中运行它时,它不显示。然而,当我运行包含图像的.jar文件(与图像位于同一文件夹中)时,则可以无缺陷地工作。

private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame game = new JFrame();
    game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    game.setSize(198, 409);  
    game.setResizable(false);
    game.setTitle("Frame Title"); 
    ImageIcon img = new ImageIcon("Icon.png");
    game.setIconImage(img.getImage());
    game.setVisible(true);

}

有没有任何想法,问题可能出在哪里?


除了以下答案之外,还要确保文件名的大小写正确。Windows对文件名不区分大小写,但在JAR内部Java是区分大小写的。另外,如果您从未将该文件添加为资源到您的包中,则该文件不会显示,除非与其并排运行。 - David Kroukamp
2个回答

4
为什么不制作像这样的软件包:
org.icon 

并为该软件包添加图标。

使用以下代码来设置图标:

ImageIcon img = new ImageIcon(Game.class.getResource("/org/Icon/NameOfIcon.png"));
game.setIconImage(img.getImage());

你的程序可以轻松找到图标。

这对我不起作用。当我尝试访问资源时,我会得到一个 NPE 错误。有人告诉我这可能是因为我正在使用可运行的 JAR 文件? - Nathan F.

3
当我使用测试图像运行上述代码时,图标会正确更改。添加:
System.out.println(System.getProperty("user.dir"));

用于显示图像所在文件夹的方法,并在必要时将其复制到该文件夹中。


谢谢,看起来图片位置错误。现在它已经可以工作了。但是我有一些带有图标的按钮可以正常工作,所以使用getClass().getResource("image.png")时图片位于哪里并不重要吗? - Kuba Spatny
1
@KubaSpatny 当然很重要。你提到的代码在类路径中查找。 - Robin
@Robin 我问这个问题是因为我把所有的图片都放在同一个文件夹里(也就是class.java文件所在的文件夹),按钮图标可以正常显示,但是窗口图标却不能。 - Kuba Spatny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接