jarファイルに画像リソースを含める
IntelliJからjarファイルを出力すると、画像が表示されなくなる問題
Swingを用いたGUIツールを作製したとき、IntelliJ上で実行した場合は画像ファイルがきちんと表示されるが、jarファイルとして出力すると画像ファイルうまく表示できなくなるという問題に直面した。
ググったところ、よく知られた現象らしく、解決策もすぐに出てきた。以下はその解決策を自分用のメモとしてまとめたものである。
状況説明
JavaのGUIツールキットであるSwingを練習するため、砂時計アイコンが表示されるだけの簡単なプログラムを作製していた。
こんなの
アイコンはhourglass.pngファイルという名前で、srcフォルダ直下に保存した。また、アイコンファイルの読み込みは以下のように記した。
ImageIcon myIcon = new ImageIcon("hourglass.png");
このコードをIntelliJ上で実行すると、砂時計アイコンがきちんと表示されたプログラムが実行される。
しかし、jarファイルを出力し、ターミナル上からプログラムを実行すると、以下のようにアイコンが表示できなくなってしまう。
解決策
ClassLoader.getResource()を利用する。
Javaでは、ファイルなどのリソース情報を取得する処理としてClassLoader.getResource()が用意されている。
先のコードでImageIcon myIcon = new ImageIcon("hourglass.png");
としていた記述を、
ClassLoader cl = this.getClass().getClassLoader();
ImageIcon myIcon = new ImageIcon(cl.getResource("hourglass.png"));
と書き換えることで、jarファイルとして出力した後も、画像リソースがちゃんと参照されるため、画像が表示されるようになる。
やったね
参照元
https://virtualwalk.hatenadiary.org/entry/20121013/1350127275
http://hiesuke.hatenablog.com/entry/2016/12/30/101639
Author And Source
この問題について(jarファイルに画像リソースを含める), 我々は、より多くの情報をここで見つけました https://qiita.com/hoshi_shiitake/items/b874dca8e37a726906c3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .