2012-03-08 18 views
0

これは、jarファイルからリソースをロードするよく知られた問題です。私がこれをやろうとしたのはこれが初めてのことではありませんが、今はそれが期待した通りに動作しません。Javaでのリソースのロードが正常に機能しない

通常、リソースをthis.getClass.getResource("foo.png")またはgetResourceAsStream()でロードしようとしましたが、それは動作します。今はそうではありません。リソースは常にnullです。

System.out.println(this.getClass.getResource(""))に私にパス(eclipseから)を印刷させると、/path/to/eclipseproject/package/structure/と表示されます。これを表示するだけの瓶からこれを実行してくださいrsrc:package/structure

これを正しくリコールすると、jarへのパスが表示されます。さらに、私は両方のケースでパッケージ構造を印刷すると考えました。私は何か間違っているのですか?

答えて

2

ものです...

ジャーの使用からファイルを解凍します。jarフォルダパスに外部ファイルを参照するために、実行可能Jarファイルの使用から実行する場合

this.getClass.getResource("/foo.png") 

を:

this.getClass.getResource("foo.png") 
// When running this from Eclipse, it would refer to files in project root! 

正しいパスを判断するためにどこから実行しているかを判断する下位レベルのコードがあります。

+0

ありがとうございました。これは働く。私は 'パッケージに必要なライブラリを生成されたJarに'チェックしたので、リソースに 'rsrc' – Simiil

0

Doeこれで、必要なパスが得られますか?

this.getClass().getClassLoader().getResource("<your class name>.class").getPath(); 

この問題の詳細については、this questionも参照してください。ここで

0

リソースへのパスの先頭に '/'を付けない限り、Class.getResource()はクラスパッケージ内のリソースを検索します。例:tld.domain.Foo.class.getResource( "Bar.txt")はtld/domain/Bar.txtを検索します

0

すべての詳細についてはURLClassLoaderを確認してください。実際は試しているかどうかによって異なります瓶にressourceにアクセスするには、同じ瓶内でロードされたクラスを使用して

  • は、このケースでは、あなたのファイル「ルート」を瓶瓶の外にロードされたクラスを使用して

  • のルートです(あなたのEclipseケース)ルートはあなたの「作業ディレクトリ」です

外部からjarファイル内のリソースにアクセスするには

、あなたは

URL url = new URL("jar", "", "file:" + jar.getCanonicalPath() + "!/" + localPathResource); url.openStream(...)

0

のようなものをこのanswer使用する必要がありますクラスはしていない場合でも、JARファイルからクラスのリソースをロードする方法の説明を提供JARファイルのマニフェストに指定されたClass-Pathには含まれていません。コードへのリンクもあります。

関連する問題