web-dev-qa-db-ja.com

EclipseがエクスポートしたRunnable JARに画像が表示されない

EclipseからエクスポートされたJARファイルを実行すると、イメージがロードされません。

リソースクラスパッケージに画像があります。画像ソースフォルダーも試してみましたが、うまくいきませんでした。

Eclipseからロードすると完璧に機能します。画像はエクスポートされたJARファイル内にあるため、正常にエクスポートされます。

私はもう試した:

label.setIcon(new ImageIcon(MainFrame.class.getResource("/resources/header.jpg")));

私も試しました:

URL url = getClass().getResource("/resources/header.jpg");
Image image = Toolkit.getDefaultToolkit().getImage(url);
label.setIcon(new ImageIcon(image));

そして:

try
{
    label.setIcon(new  ImageIcon(ImageIO.read(getClass().getResource("/resources/header.jpg"))));
}
catch (IOException e1)
{
    e1.printStackTrace();
}

助言がありますか?

33
DeNitE Appz

問題は、Windowsプロジェクトにこのプロジェクトがあったことです...「!」がありました。その中...(DeNitE!->は私のWindowsプロファイルの名前でした)

(!なしで)DeNitEに変更するとすぐにうまくいきました...

0
DeNitE Appz

私には問題ありません。異なる可能性のあるものを確認してください。

例1:(resourcesinsrc)

手順:

  1. ファイル構造

    enter image description here

  2. コード

    package com.stackoverflow.test;
    
    import Java.net.URL;
    import javax.swing.*;  // Wild carded for brevity. 
                           // Actual code imports single classes
    public class Main {
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run() {
                    URL url = Main.class.getResource(
                                         "/resources/stackoverflow.png");
                    ImageIcon icon = new ImageIcon(url);
                    JFrame frame = new JFrame();
                    frame.add(new JLabel(icon));
                    frame.pack();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    }
    
  3. [プロジェクトを右クリック]→[エクスポート]→[実行可能なJarファイル]→[起動設定のセットアップ]

    enter image description here

  4. 利益

    enter image description here

参考までに、Eclipseでも同じセットアップが正常に実行されます


例2:(リソース内のリソースnot-ただしプロジェクト内)

手順:

  1. ファイル構造(通知リソースはプレーンフォルダーのように見える)

    enter image description here

  2. 今やらなければならないことは、リソースをビルドパスに配置することです。これにより、クラスパス上のフォルダー(フォルダー自体を除く)にすべてが配置されます。

    • プロジェクトを右クリックして、[ビルドパス]→[ビルドパスの構成]に移動します。

      enter image description here

    • ダイアログの[ソース]タブから[フォルダーの追加]を選択し、新しいダイアログで[リソース]フォルダーを選択します

      enter image description here

    • リソースフォルダーのcontentsはビルドパスにあります(フォルダー内の小さなパッケージに注意してください

      enter image description here

  3. 新しいコードは、パスにリソースプレフィックスを使用しなくなりました

    URL url = Main.class.getResource("/stackoverflow.png");
    
  4. 上記のステップ3および4と同じで、利益があります!


[〜#〜] update [〜#〜]

起動構成のセットアップ

通常、クラスを実行すると(つまり、クラスを右クリックしてJava Application)として実行)、実行構成がセットアップされます。これは、マニフェストの起動ポイントとして設定する必要があります。 。しかし、手動で行う方法は次のとおりです。

手順:

  1. [プロジェクトを右クリック]→[プロパティ]→[実行/デバッグ設定]

    enter image description here 実行構成(クラスを実行するだけで暗黙的に設定される)が既にあることがわかります。ただし、新しいものを作成するには、[新規]→[Javaアプリケーション]を選択します

  2. 実行構成の名前を作成し、メインの起動クラスを参照または入力します。私の場合、com.stackoverflow.test.Mainクラス

    enter image description here

  3. 上記の例のようにエクスポートするとき、実行構成を選択します

    enter image description here

  4. 上記のようにjarを実行します。


[〜#〜] edit [〜#〜]

確認する結果

マニフェスト:

Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: com.stackoverflow.test.Main
Main-Class: org.Eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

抽出されたjar:

enter image description here

78
Paul Samsotha

あなたが変わったとき、私はそれを見つけました:

必要なライブラリを生成されたjarにパッケージ化する

必要なライブラリーを生成されたjarに抽出します

起動設定のセットアップでそれは私のために働いた。

Extract Required Libraries Button

2
sazzy4o

2つの簡単なステップ:

1-フォルダーをビルドパスに追加します。

2-これを使用:

    InputStream url = this.getClass().getResourceAsStream("/load04.gif");
    myImageView.setImage(new Image(url));
1

同じ問題があります。これを使用できます。

Image Icon= new ImageIcon(new WE4().getClass().getResource("IC.jpg"))

ここで、WE4はクラスコンストラクター名です。それが役に立てば幸い。

1

Eclipseから実行可能なJARファイルを作成するには、「Eclipse(または他のIDE ...または手動で)で実行可能なJARを作成する」という記事を参照してください:( https://www.cefns.nau.edu/ 〜edo/Classes/CS477_WWW/Docs/RunnableJarsinEclipse.html )、次の4つのことを行う必要があると述べました

  1. Eclipseでプロジェクトを作成するだけでなく、コード用のパッケージを作成してください。
  2. コードのメインパッケージの下にリソースファイルのサブパッケージ(サブフォルダー)を作成します(サブパッケージはメインパッケージの下にあり、プロジェクト内だけではないことに注意してください)
  3. getResource()からすべてのファイル参照を取得(URL参照を取得)
  4. Eclipseで実行可能JARとしてファイルをエクスポート(ファイル->エクスポート...->実行可能JARファイルを選択->次へ-> ...)

ただし、上記の記事のサンプルコードの画像ファイルでは、ImageIconのみが作成され、SWT Imageは作成されません。URLからSWT Imageを取得する方法やImageIconをSWT Imageに変換する方法については、インターネットで多くの質問がありますが、以下は、URLからSWTイメージを取得するためのコード例です。

Image imgSWT=null;  // Image class is the SWT Image class
ImageDescriptor imgDesc=null;
Java.net.URL imgURL = YourClassName.class.getResource("path/image_filename");

if (imgURL != null) {
    imgDesc = ImageDescriptor.createFromURL(imgURL);
    imgSWT = imgDesc.createImage();
}
1
phchen2

別の回避策は、リソースファイル(.jarファイル)を同じ場所に配置すれば機能するはずです。唯一の欠点は、常にjarファイルを含むリソースが必要になることです。

それが問題でない場合は、この方法で行うことができます。

0
Nevets17

ファイルをjarに入れる必要がない限り、これがおそらく最も簡単な方法です。

header = ImageIO.read(new File("./resources/header.jpeg"));

ヘッダーはImage/BufferedImageである必要があります。これは、実行可能jarが含まれるフォルダーに移動し、resourcesというフォルダーを探します。 http://i.stack.imgur.com/x8xtO.png

0
TheChubbyPanda