アプリ版:「スタンプのみでお礼する」機能のリリースについて

GUIアプリを作成し、以下の方法でプログラムアイコンを設定しました。
アイコンはmainクラスのあるフォルダと同じ場所においてあります。

ImageIcon icon = new ImageIcon("./src/icon.PNG");
frame.setIconImage(icon.getImage());

この方法でプログラムアイコンが設定出来たのですが、
Eclipseのエクスポートからjarファイルを作成し、作成されたjarファイル
を実行してみたところ、プログラムアイコンが自分で設定したもの
ではなくデフォルトのjavaアイコンになってしまっていました。

アイコンの設定方法か、jarファイルの作成方法に問題があると
思うのですが、どうすればjarファイルのプログラムアイコンが
自分で設定したものになるのでしょうか。

A 回答 (3件)

> この場合、どのクラスのインスタンスを生成すれば良いのでしょうか。



この場合だとMyClassです。

MyClassにはコンストラクターが無いようですが,その場合はデフォルト・コンストラクターが使えますから,

URL imageIconUrl = (new MyClass()).getClass().getClassLoader().getResource("icon.PNG");

という感じになるかと思います。
    • good
    • 0
この回答へのお礼

返事が遅くなってすみません。

おかげで、アプリのアイコンを変更することが出来るようになりました。

本当にありがとうございました。

お礼日時:2009/12/31 13:39

> "icon.PNG"を含んだJARファイルの作成はどのようにすれば良いのでしょうか。



方法は色々あると思います。jarのヘルプ(jar -help)やEclipseのヘルプを見てください。Eclipseでやる場合は,たぶんエクスポートするまえにアイコンファイルをEclipseのプロジェクト内にインポートする必要があると思います。

> getClass()の部分で「型 Object の非 static メソッド getClass() を static 参照することはできません」
> というエラーが出てしまい、使用できませんでした。

staticメソッド内でインスタンスを指定せずにgetClass()を呼べば上記のエラーが出ます。当該クラスのインスタンスを生成してそのインスタンスのメソッドとしてgetClass()以下を呼べばエラーは出なくなるはずです。

http://www.javaroad.jp/java_class9.htm

この回答への補足

回答有難う御座います。
おかげで、画像ファイルを含んだjarファイルを作成する事が出来るようになりました。

インスタンスを生成せずに、メソッドを使用しているためにエラーが
発生している事も理解できました。
しかし、当該クラスが何を指しているのかがわかりません。
今のメインクラスのコードは以下の様になっています。

public class Myclass {
public static void main(String[] args) {

JFrame frame = new JFrame("タイトル");
OrgPanel panel1 = new OrgPanel(); //JPanelを継承したオリジナルクラス

//コンテナ生成
Container cont = frame.getContentPane();
cont.add(panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(250, 40, 885, 715);
frame.setVisible(true);

//アプリアイコン設定
URL imageIconUrl = frame.getClass().getClassLoader().getResource("./src/icon.PNG");
ImageIcon icon = new ImageIcon(imageIconUrl);
frame.setIconImage(icon.getImage());
}
}

frameやpanel1、contが当該クラスなのかと思ったのですが
どれを試してもプログラムアイコンは表示されませんでした。

この場合、どのクラスのインスタンスを生成すれば良いのでしょうか。

補足日時:2009/12/10 16:57
    • good
    • 1

そもそもJARファイル内に"icon.PNG"ファイルは含まれているのでしょうか?



含まれている場合,JARファイル内のファイルにアクセスするには,リソースとしてアクセスする必要があります。

http://osima.jp/blog/resources_in_jar.html



http://www.ne.jp/asahi/hishidama/home/tech/java/ …

を参考にすると,

URL imageIconUrl = getClass().getClassLoader().getResource("icon.PNG");
ImageIcon icon = new ImageIcon(imageIconUrl);

という感じになるのではないかと思います。

この回答への補足

回答ありがとうございます。

JARファイルの中身を確認したところ、"icon.PNG"は含まれていませんでした。
"icon.PNG"を含んだJARファイルの作成はどのようにすれば良いのでしょうか。

また、教えて頂いたページを参考にして、ご指摘のコードを追加したところ
getClass()の部分で「型 Object の非 static メソッド getClass() を static 参照することはできません」
というエラーが出てしまい、使用できませんでした。
これは、JARファイルに"icon.PNG"が含まれている事とは無関係のエラーだと思うのですが、
何が間違っているのでしょうか。

補足日時:2009/12/06 19:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!