2011-07-20 13 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); 
} 

私はこれを試してみましたが、今私は、nullポインタ例外を取得します。

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

編集[ソリューション]:私は解決策を見つけました。

さらにパスに../を追加して完全に動作します。 :D

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

ありがとうございました。 :)

+1

ImageIconコンストラクタに 'String'を渡すというこのアプローチは、画像がJarにあるときにはうまくいきません(分散されていると考えられます)。パラノイド - アンドロイドは数日前に正しいテクニックを提供しました。それがあなたのプロジェクト構造のために働かせる方法を理解することが最善でしょう。 –

答えて

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のルートディレクトリにある場合は、imageDirectory文字列は必要ありません。 – rtheunissen

+1

私の答えをもう一度見てください。イメージではなくImageIconのローダメソッドを提供しました。そこで、イメージをロードするように修正しました。コメントにコードを使用する場合は 'とインデントを使用します。 :) – rtheunissen

+2

@Bhathiyaコメントにコードを投稿するのではなく、新しいコードで質問を編集(編集)してください。それは混乱になります! –

関連する問題