2013-06-29 67 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);