48

Eclipse から Java アプリを実行すると、ImageIcon が正常に表示されます。

しかし、jar を作成した後、イメージへのパスは明らかに台無しになります。

実行時にjarから画像を抽出して開く方法はありますか? または、これを行うより良い方法はありますか?

可能であれば単一のjarファイルを配布したいです。

4

5 に答える 5

37

ImageIconコードが読み込まれるのと同じ jar 内の画像ファイルからを作成するには、次のようにします。

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))

Class.getResourceリソースの URL (またはnull!) を返します。ImageIconURL からロードするコンストラクターがあります。

「クラスパス」にない jar 内のリソースの URL を作成するには、 のドキュメントを参照してくださいjava.net.JarURLConnection

于 2008-09-05T11:30:37.147 に答える
24

次のようなものを試すことができます:

InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");

JAR ファイルでは、次のようなディレクトリ構造になっている可能性があります。

MyJAR.jar
- com (ここにあるクラス ファイル)
- 画像
----image.jpg

于 2008-08-27T20:18:29.307 に答える
12

これは、コンテンツ ペインの背景画像を読み込んで設定するために機能しています。

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が返されました。

于 2013-03-12T05:09:06.483 に答える
4

netbeans 8.1 で私が行ったことは、プロジェクト ファイルのsrcフォルダー内のResourcesと呼ばれるアイコンとその他の画像のフォルダーを含めることです。したがって、 Jarファイルをビルドするたびに、そこにフォルダーが含まれます。ファイル ツリーは次のようになります。

  • src (ソース パッケージ内の Java ファイルはこちら)
  • ** プロジェクトで名前を付けたパッケージ**

    • ファイル.java
  • 資力

    • 画像.jpg

コードは次のようになります。

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
于 2017-02-07T08:21:42.183 に答える
0

実行時に 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 が小文字の場合、機能しません。スペース、ケース、スペルをチェック

于 2015-12-07T16:10:43.793 に答える