2013-06-29 66 views
9

我一直在搜索无处不在的如何在Java中设置图标图像,它总是最终不工作,或者它给了我错误。在这里,我的主要方法是我把代码:在Java中设置图标图像

public static void main(String[] args) { 
    Game game = new Game(); 

    // This right here! 
    game.frame.setIconImage(new ImageIcon("/Icon.png").getImage()); 

    game.frame.setResizable(false); 
    game.frame.setTitle(title); 
    game.frame.add(game); 
    game.frame.pack(); 
    game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    game.frame.setLocationRelativeTo(null); 
    game.frame.setVisible(true); 

} 

我对图像路径为“%PROJECT%/ RES/Image.png”我只是用/Image.png先走,并访问我的res文件夹(就像我在项目的其他部分所做的那样),我甚至将它转换成了一个图标文件,并尝试过,但它决定使用默认的Java图标。

+2

每16小时询问一次。你可能想在未来搜索。 –

+0

+1 @AndrewThompsons评论。有一个阅读[这里](http://stackoverflow.com/questions/13796331/jar-embedded-resources-nullpointerexception/13797070#13797070)。它应该可以帮助您解决jar中嵌入资源的大多数问题。 –

+0

请注意,我已经删除了[tag:set]标签,因为您的问题与“套件”或集合的编程概念无关。我添加了[tag:Swing]标签,因为此标题与您的问题非常相关。 –

回答

8

您的问题,使用默认的工具包往往是由于在错误的地方寻找图像,或者如果你的类和图像是在一个jar文件,然后寻找文件,其中文件唐不存在。我建议你使用资源来摆脱第二个问题。

例如,

// the path must be relative to your *class* files 
String imagePath = "res/Image.png"; 
InputStream imgStream = Game.class.getResourceAsStream(imagePath); 
BufferedImage myImg = ImageIO.read(imgStream); 
// ImageIcon icon = new ImageIcon(myImg); 

// use icon here 
game.frame.setIconImage(myImg); 
+0

当我使用它时,它会在setIconImage, 上抛出一个错误_JFrame类型中的方法setIconImage(Image)不适用于参数(ImageIcon)_ ,它说它将其更改为setIconImages或将ImageIcon类型更改为Image。 – Shzylo

+0

@Shzylo:看到变化。 –

+0

谢谢你的工作:)只是不得不把一些东西放在try/catch中。 – Shzylo

7

frame.setIconImage(Toolkit.getDefaultToolkit().getImage("Icon.png")); 
+0

这工作,直到我导出我的jar文件。 – Shzylo

+1

@Shzylo:那里不足为奇。 –

0

我用这个:

import javax.imageio.ImageIO; 
import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.io.InputStream; 

public class IconImageUtilities 
{ 
    public static void setIconImage(Window window) 
    { 
     try 
     { 
      InputStream imageInputStream = window.getClass().getResourceAsStream("/Icon.png"); 
      BufferedImage bufferedImage = ImageIO.read(imageInputStream); 
      window.setIconImage(bufferedImage); 
     } catch (IOException exception) 
     { 
      exception.printStackTrace(); 
     } 
    } 
} 

只需将您的图像称为资源文件夹Icon.png与本身作为参数调用上述方法从a延伸类的类中Window系列如JFrameJDialog

IconImageUtilities.setIconImage(this);