Swing UI で使用するためにいくつかの画像をロードしようとしましたが、コンパイルされたプログラムは画像を正しくロードしますが、.jar は画像を見つけられません。
まず、リソース ファイルを「リソース ルート」としてマークしました。プロジェクトのレイアウトは次のようになります。
コンパイル出力レイアウトは次のようになります。
.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はそれを見つけられません