2011-07-20 39 views
0

我嘗試了幾種方法將圖標添加到JFrame。當我使用源代碼運行它時,每種方法都能很好地工作。將圖標添加到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()); 

謝謝大家幫助我。 :)

+1

這種將'String'傳遞給'ImageIcon'構造函數的方法在圖像位於Jar中時不起作用(因爲它可能在分佈時)。偏執狂-Android在幾天前提供了正確的技術。最好弄清楚如何使它適用於你的項目結構。 –

回答

4

您應該使用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; 
    } 
+0

例如,在我的jar中我有一個名爲「images」的文件夾。如果您的圖像全部位於jar的根目錄中,則不需要imageDirectory字符串。 – rtheunissen

+1

再看看我的答案。我給你一個ImageIcon的加載器方法,而不是一個圖像 - 所以我修復它,以便它加載一個圖像。在評論中使用代碼時使用'和縮進。 :) – rtheunissen

+2

@Bhathiya請用新的代碼更新您的問題(編輯它),而不是在評論中發佈代碼。它變得一團糟! –