2012-01-06 14 views
5

サーバサイドのJavaコード内で処理を行うためにバイナリイメージファイルをロードしようとしています。私は現在、私の実行クラスが存在するパッケージに私の画像を配置し、呼び出しています:Tomcatにデプロイされた展開されていないwarファイルのリソースファイルを読み取るにはどうすればよいですか?

Image img = Image.getInstance(this.getClass().getResource("logo.png")); 

を私が爆発し、戦争のセットアップで私の開発ボックス上でTomcatを実行しているとき、これは正常に動作しますが、私は、サーバーにデプロイするときTomcatを実行してwarファイルを分解しない場合、getResourceを呼び出すとnullが返されます。

私も私のコンテキストルートに画像を移動すると、このようにそれをアクセスしようとしました:

Image img = Image.getInstance(this.getClass().getResource("/../../logo.png")); 

繰り返しますが、これは私の開発ボックスに取り組んでいますが、私は他の場所でそれを展開していないとき。

このファイルにアクセスするには、より良い方法がありますか?私は間違って何をしていますか?

ありがとうございます!

+0

私はおそらくも私がいることを言及している必要がありますMavenを使って私のweb-appをビルドします。私は自分の問題を解決する完全な答えを持っていますが、自分の質問で8時間は投稿できません。 – 11101101b

+0

"src/main/resources"ディレクトリにリソースを入れてください。 次にアクセスしてください: this.getClass()。getResource( "/ logo.png"); または: Thread.currentThread()。getContextClassLoader()。getResource( "logo.png"); – 11101101b

答えて

5

あなたはMavenを使用して構築している場合は、あなたが実際に画像をアーカイブに置かれますことを確認したいと思います。

src/main/resourcesディレクトリにリソースを入れてください。その後でそれらにアクセス:

this.getClass().getResource("/logo.png"); 

か:

Thread.currentThread().getContextClassLoader().getResource("logo.png"); 

(上記のコメントからのコードサンプルが、より見えるように答えに入れて)

+0

最初のケースでは、ファイル名の前に '/'を忘れないようにしてください –

1

あなたはあなたのクラスパスのルートにあなたのイメージを入れて、これを試みることができる:

Thread.currentThread().getContextClassLoader() 
       .getResource("logo.png"); 
+1

+1 - クラスパスのルートで、WARファイル内の "WEB-INF/classes"は、多くの人が上記のリソースを置く場所です。彼らはそこに "images/logo.png"のようなフォルダを使って整理することができます。 – rfeak

関連する問題