Eclipse から Java アプリを実行すると、ImageIcon が正常に表示されます。
しかし、jar を作成した後、イメージへのパスは明らかに台無しになります。
実行時にjarから画像を抽出して開く方法はありますか? または、これを行うより良い方法はありますか?
可能であれば単一のjarファイルを配布したいです。
Eclipse から Java アプリを実行すると、ImageIcon が正常に表示されます。
しかし、jar を作成した後、イメージへのパスは明らかに台無しになります。
実行時にjarから画像を抽出して開く方法はありますか? または、これを行うより良い方法はありますか?
可能であれば単一のjarファイルを配布したいです。
ImageIcon
コードが読み込まれるのと同じ jar 内の画像ファイルからを作成するには、次のようにします。
new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))
Class.getResource
リソースの URL (またはnull
!) を返します。ImageIcon
URL からロードするコンストラクターがあります。
「クラスパス」にない jar 内のリソースの URL を作成するには、 のドキュメントを参照してくださいjava.net.JarURLConnection
。
次のようなものを試すことができます:
InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");
JAR ファイルでは、次のようなディレクトリ構造になっている可能性があります。
MyJAR.jar
- com (ここにあるクラス ファイル)
- 画像
----image.jpg
これは、コンテンツ ペインの背景画像を読み込んで設定するために機能しています。
jar (またはビルド パス) には以下が含まれます。
- com
- img
---- bg.png
Java には以下が含まれます。
JFrame f = new JFrame("Testing load resource from jar");
try {
BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
e.printStackTrace();
}
jar と unjarred (専門用語です) の実行の両方でテストされ、動作しています。
ところでgetClass().getClassLoader().getResourceAsStream("/img/bg.png")
-私が最初に試した-null InputStreamが返されました。
netbeans 8.1 で私が行ったことは、プロジェクト ファイルのsrcフォルダー内のResourcesと呼ばれるアイコンとその他の画像のフォルダーを含めることです。したがって、 Jarファイルをビルドするたびに、そこにフォルダーが含まれます。ファイル ツリーは次のようになります。
- src (ソース パッケージ内の Java ファイルはこちら)
** プロジェクトで名前を付けたパッケージ**
- ファイル.java
資力
- 画像.jpg
コードは次のようになります。
jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
実行時に Jar ファイルからイメージをロードすることは、Netbeans などの IDE から実行されたときにイメージをロードするのと同じです。違いは、JAR ファイルからイメージをロードする場合、パスが正しく、大文字と小文字が区別される必要があることです(非常に重要)。これは私のために働く
image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg")); img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH); lblhabitat1.setIcon(新しい ImageIcon(img));
「/Pictures/firstgame/habitat1.jpg」の p が小文字の場合、機能しません。スペース、ケース、スペルをチェック