0

Swing UI で使用するためにいくつかの画像をロードしようとしましたが、コンパイルされたプログラムは画像を正しくロードしますが、.jar は画像を見つけられません

まず、リソース ファイルを「リソース ルート」としてマークしました。プロジェクトのレイアウトは次のようになります。

プロジェクトのレイアウトを示します。ソース フォルダーの外側にはリソース フォルダーがあり、その中には問題のリソースを含む images フォルダーがあります。

コンパイル出力レイアウトは次のようになります。

ここに画像の説明を入力

.jar レイアウトは次のようになります。

ここに画像の説明を入力

現在、画像をロードしているコードはguiパッケージ内にあります。ここにあります:

        try {
            System.out.println(this.getClass().getResource("../images/buttonClip.png").getPath());
            attchmntBtnImg = ImageIO.read(getClass().getResource("../images/buttonClip.png"));
            sendMsgBtnImg  = ImageIO.read(getClass().getResource("../images/buttonForward.png"));
        }
        catch (IOException e) {
            e.printStackTrace();
        }

印刷ライン出力は、画像のパスを正しく印刷します

/C:/Users/path/to/Project/out/production/Peer2Party_desktop/images/buttonClip.png

intellij のアイデアから実行してもエラーは発生しませんが、生成されたアーティファクト (管理者特権の有無にかかわらず、cmd から実行した場合) は System.out.println() で NullPointerException を返しますが、間違いなく、そうではありません。エラーの原因は、println を削除しても次の行でクラッシュするためです。

ここに画像の説明を入力

画像をロードするためにこれらを実行しようとしましたが、役に立ちませんでした:

this.getClass().getResource("/../images/buttonClip.png");
getClass().getResource("/../images/buttonClip.png");
this.getClass().getResource("images/buttonClip.png");
getClass().getResource("images/buttonClip.png");
this.getClass().getResourceAsStream("images/buttonClip.png");
getClass().getResourceAsStream("images/buttonClip.png");

どんな助けでも大歓迎です。

重要な注意:私はWindows 10を使用しています。写真は正しいパス(file.jar/images/buttonClip.png)内にありますが、実行時に.classはそれを見つけられません

4

1 に答える 1