LoginSignup
1
1

More than 3 years have passed since last update.

jarファイルに画像リソースを含める

Last updated at Posted at 2020-01-22

IntelliJからjarファイルを出力すると、画像が表示されなくなる問題

Swingを用いたGUIツールを作製したとき、IntelliJ上で実行した場合は画像ファイルがきちんと表示されるが、jarファイルとして出力すると画像ファイルうまく表示できなくなるという問題に直面した。
ググったところ、よく知られた現象らしく、解決策もすぐに出てきた。以下はその解決策を自分用のメモとしてまとめたものである。

状況説明

JavaのGUIツールキットであるSwingを練習するため、砂時計アイコンが表示されるだけの簡単なプログラムを作製していた。
スクリーンショット 2020-01-22 10.42.20.png
こんなの

アイコンはhourglass.pngファイルという名前で、srcフォルダ直下に保存した。また、アイコンファイルの読み込みは以下のように記した。
ImageIcon myIcon = new ImageIcon("hourglass.png");
スクリーンショット 2020-01-22 10.49.04.png

このコードをIntelliJ上で実行すると、砂時計アイコンがきちんと表示されたプログラムが実行される。
しかし、jarファイルを出力し、ターミナル上からプログラムを実行すると、以下のようにアイコンが表示できなくなってしまう。

スクリーンショット 2020-01-22 11.23.16.png

解決策

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ファイルとして出力した後も、画像リソースがちゃんと参照されるため、画像が表示されるようになる。
スクリーンショット 2020-01-22 10.42.20.png
やったね

参照元

https://virtualwalk.hatenadiary.org/entry/20121013/1350127275
http://hiesuke.hatenablog.com/entry/2016/12/30/101639

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1