私はデフォルトのsrcディレクトリの外にある私のリソースにアクセスすることができないrunnable jarファイルを持っています。Javaクラスローダーがjarファイル内のリソースを見つけることができません
public class Foo {
private static final ClassLoader CLASS_LOADER = Foo.class.getClassLoader();
public static File getResourceFile(String relativePath) {
// Since I'm using getClassLoader, the path will resolve starting from
// the root of the classpath and it'll take an absolute resource name
// usage: getResourceFile("img/img1.png")
// result: Exception in thread "main" java.lang.NullPointerException
return new File(CLASS_LOADER.getResource(relativePath).getFile());
}
}
フォルダのセットアップ:What is the difference between Class.getResource() and ClassLoader.getResource()からの私の理解に基づいて、私は次のgetResourceFile機能を使って、ルート/ RES/IMG/img1.png(下記参照フォルダの設定)にアクセスすることができるはず
root/
src/
foo/
bar/
res/
img/
img1.png
audio/
audio1.wav
jar実行ファイル自体を実行しようとすると問題が発生します。しかし、奇妙なことは、私は実際にパスを正しく解決することができたeclipse IDEを通してこれを複製することができなかったことです。私はJavaが実行時にリソースフォルダを見つけることができるように、(プロジェクト - >プロパティ - > Javaビルドパス - >フォルダの追加を介して)ビルドパスにリソースディレクトリを追加しました。
jarファイルの生成に関して何かがありますか?瓶を開梱すると、すべてがIMGとルート(上記の初期フォルダの設定を与えられた)にあるオーディオディレクトリとの順序であると思われるファイル:
foo/
/bar
img/
img1.png
audio/
audio1.wav
あなたは 'relativePath'の値を投稿できますか? –
'jar'に入ると、リソースはもはや「ファイル」ではなくなりました。そのURIを 'File'に入れると、そのファイルはファイルシステムにないので見つからないでしょう。ファイルではなく入力ストリームとして使用することになっています。 – RealSkeptic
@DavidPérezCabrera:例:img/img1.png – Alan