2011-03-11 5 views
2

パッケージのsrc /フォルダから画像を取得しようとしていますが、何の成功もありません。srcフォルダのToolkit.getImage()

nekoPics[i] = tk.getImage(getClass().getResource(String.format("resources/pracs/neko/%s", nekosrc[i]))); 

誰でも募集しますか?

答えて

3

コードが作成されている場所にコピーされていますか?ディレクトリがsrcの場合、実行時にクラスがbinディレクトリ(またはjarファイル)にある場合は役に立ちません。

クラスがパッケージ内にある場合、Class.getResourceはデフォルトでそのパッケージに相対して動作します。パッケージがfoo.barの場合、foo/bar/resources/pracs/neko/whateverを探しています。あなたはそれを絶対にしたい場合は、ClassLoader.getResourceを使用するか、またはあなたの文字列の先頭でリード/を置くことができ、次のいずれかもちろん

String resource = String.format("/resources/pracs/neko/%s", nekosrc[i]); 
nekoPics[i] = tk.getImage(getClass().getResource(resource)); 

または

String resource = String.format("resources/pracs/neko/%s", nekosrc[i]); 
nekoPics[i] = tk.getImage(getClass().getClassLoader().getResource(resource)); 

reousrcesディレクトリがある場合実際にあなたのパッケージを基準にして、それを行うべきではありません:

+0

チャームのように働いてくれましたが、クラスローダーが正しいパスからリソースを取得する方法はありますか? Javaで画像リソースを処理する典型的な方法は何ですか?あなたはどこにプロジェクトを置くのですか? –

+0

@Alex:それはあなたのビルド環境に依存します - それを行う方法はたくさんあります。クラスローダーは論理的な「ルート」を知っています。それだけです。 –

1

getClass().getResource()を相対パスで使用すると(すなわち、で始まらないもの)、パスはリソースをロードするために使用しているクラスのパッケージに関連してと解釈されます。

そのコードがクラスmypackage.MyClassにある場合、resources/pracs/neko/somethingを要求すると、実際にはクラスパスに対してmypackage/resources/pracs/neko/somethingが見つかりません。

関連する問題