• ベストアンサー

eclipseでjarファイル内のリソースファイルをうまく扱うには?

こんにちわ。 私は今、windows XP + eclipse 3.1.1(日本語化済) でswingアプリケーションを作っています。 完成後は、実行可能jarファイルとして配布したいと考えています。 jarファイル内の画像ファイルを読み込んで、トグルボタンの アイコンに使いたいので、メインクラス内で、 jToggleButton1.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/transition.jpg"))); という記述をしました。 「ファイル」→「エクスポート」→「jarファイル」 で、実行可能jarファイルを作ったときはちゃんと 画像が読み取れているのですが、 eclipseから直接実行をすると、以下のようなNullPointerException が発生してしまいます。 java.lang.NullPointerException at javax.swing.ImageIcon.<init>(Unknown Source) at DTT.getJToggleButton1(DTT.java:261) at DTT.getJPanel5(DTT.java:216) at DTT.getJScrollPane(DTT.java:203) at DTT.getJPanel(DTT.java:99) at DTT.initialize(DTT.java:478) at DTT.<init>(DTT.java:468) at DTT.main(DTT.java:458) (DTTという名前のアプリケーションなのです。。) jarに出力する場合と、eclipseから直接実行する場合で 記述を変える必要があるのでしょうか? それともデフォルト作業ディレクトリの指定などを適切に行えば 統一的に扱えるようになるのでしょうか? なにとぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.4

classファイルが見えませんがclassファイルはbinフォルダに作られる設定で宜しいでしょうか。 それならimagesフォルダをsrcフォルダ内に移動してください。再コンパイルすればbinフォルダ下にimagesフォルダがコピーされ、その環境で実行すれば上手くいくと思います。

arutoki
質問者

お礼

回答ありがとうございます。 やってみたのですが、よくわかりません。 結局、getResource()がnullを返した場合は パスを直接指定するようにif文を付けました。 迅速な対応、ありがとうございました。

その他の回答 (3)

  • galoon
  • ベストアンサー率28% (38/133)
回答No.3

#1です。 jarファイルをEclipseから利用しようとしたものと極介してしまいました、申し訳ない。 #2にあるrinkun氏の指摘や相対パスのたどり方、パス基点を再確認してみてください。 #あまりお力になれていませんね、すみません。 m(__)m

arutoki
質問者

補足

なんどもありがとうございます。 >#あまりお力になれていませんね、すみません。 m(__)m めっそうもございません。一緒に考えてくれる人がいるという だけで恐れ多いことだと思います。。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

該当jpgファイルをJavaソースプログラムの対応位置に置いていますか。 置いておけばバイナリファイルでも同じ位置にコピーされていて読めると思いますけど。

arutoki
質問者

補足

回答ありがとうございます。 パスはあっていると思うのですが、どこかの 設定がおかしいのかうまくいきません。 ほかにも足りない情報があるかと思います。 ご指摘、ご教授よろしくお願いします。

  • galoon
  • ベストアンサー率28% (38/133)
回答No.1

おそらくプロジェクトのプロパティなどで参照先のjarファイルとして登録されていないのではないかと。 classpathの設定に問題のjarファイルを追加してあげれば実行できそう。 はずれていたら申し訳ない。

arutoki
質問者

お礼

すばやい回答ありがとうございます。 (挨拶をわすれてしまいました。。すいません。。) もうすこしがんばってみます。

arutoki
質問者

補足

えーっと、プロジェクトのプロパティで、ライブラリに JARを追加するという意味でしょうか? eclipseから直接実行するときは、jarファイルが生成 されていないので、指定しようがないと思うのですが。 すいません。意味がよくわかりません。 あまりeclipseに詳しくないもので。すみません。。

関連するQ&A