• ベストアンサー

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から直接実行する場合で 記述を変える必要があるのでしょうか? それともデフォルト作業ディレクトリの指定などを適切に行えば 統一的に扱えるようになるのでしょうか? なにとぞよろしくお願いします。

  • Java
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • eclipseでのjar生成について

    eclipseで実行可能なjarファイルを作成しようとしているのですが、 以下のようなエラーが出てしまい作成はできても、実行することができずにいます。 java.lang.UnsatisfiedLinkError: no dsj in java.library.path Exception in thread "Thread-0" java.lang.UnsatisfiedLinkError: de.humatic.dsj.DS Filtergraph.initMethodIDs()V at de.humatic.dsj.DSFiltergraph.initMethodIDs(Native Method) at de.humatic.dsj.DSFiltergraph.<clinit>(SourceFile:143) at media.VideoDSJ.init(VideoDSJ.java:41) at media.VideoDSJ.<init>(VideoDSJ.java:35) at JavaLive.JavaLive.run(JavaLive.java:137) エラーを見てみる限り、外部ライブラリーとして使っているdsjへのパスがうまくできていないと思うのですが、 プロジェクト自体にimportしていますし、必須ライブラリーをパッケージするように出力をしていますがうまくいきません。 配布したあとは特にライブラリ等をインストールを必要とせずに実行させたいので、なんとか中にライブラリーを包括したいのですが、 何かいい方法は無いでしょうか?

    • ベストアンサー
    • Java
  • eclipseでのjarファイルを使用した実行について

    現在eclipse+Tomcatを使用してプログラムを実行しています。なお、プログラムはjarファイルとしてまとめてあります。そして、eclipseで外部JARの追加でjarファイルを指定して実行しています。しかし、実行時にNoClassExceptionが発生してしまいます。原因はクラスパスが通っていないと思われるのですが自分で作成したjarファイルはどこに配置すべきなのでしょうか?

  • .jarファイルを作りたい

    JAVAど素人です。 必要があってソースも同時に公開されているフリーのjavaアプリケーションをいろんなフリーソフトを試しながら何とかソースファイルの○○.javaを編集しました。 それをIE上で動くようにするには.jarにコンパイルする必要があるとのことでそれをソースファイルを基に作りたいのですがどうしていいのか分かりません。 いろんなソフトでコンパイルをしようとしましたがうまくいきません。 そのたくさんダウンロードして試している中でEclipse3.3というソフトでトライしようとしているのですが、ついに完全に行き詰まってしまいました。 どなたかこの.javaファイルを.jarという1つの実行可能なファイルにコンパイルする方法を教えてください。 もちろん別のソフトでもかまいませんが、フリーソフトでお願いしたいです。 (JPEditとmakeJadJarというソフトではランタイムVB6.0をインストールして実行したのですが、うまくいきませんでした。JDK 5.0 update12もインストールしています)

  • Eclipseで、配布可能なJARファイルを作成する方法が解りません。

    Eclipseで、何も無いウインドウを開くというだけのアプリケーションを作ろうとしました。 ライブラリに、 org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar を追加しております。 配布できる形式にしたいため、Jarファイルを作成しました。 プロジェクトにMETA-INFというフォルダを作成し、そこに「Manifest.mf」というファイルを作成し、以下のように記述しました。 Manifest-Version: 1.0 Class-Path: "C:\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar" Main-Class: view.TestWindow ちなみに、「view.TestWindow」というのがmainメソッドのあるクラスの名前です。 JARファイルをエクスポートして、コマンドライン上から以下のように入力しました。 > java -jar TestWindow.jar 結果は、以下のようなエラーが表示されました。 Failed to load Main-Class manifest attribute from TestWindow.jar 多分、「Main-Class」の情報がマニフェストファイルから見つからないと言っているんだと思いますが、Eclipse上からエクスポートする際にはちゃんと場所を指定しています。何が問題なのか解りません。 将来的には、違うマシン上で動作するアプリケーションを作りたいと思っているのですが、最初でいきなり躓いてしまいました。 どなたか教えて頂けないでしょうか。

    • ベストアンサー
    • Java
  • Eclipseを用いたJARファイル作成について

    Eclipseを用いてjavaのプログラムをしているのですが アプレットのプログラム"のみ"がJARファイルにエクスポートできずに困っております。 [プロジェクト]を右クリック→[エクスポート]→[JARファイル]に設定するところまでは良いのですが 「JARマニフェスト仕様」というページの、「アプリケーションのエントリー・ポイントのクラスを指定」という項目で、メインクラスを参照しても アプレットのプログラムのクラス"のみ"が表示されていないのでエクスポートできません。コンソールのプログラムのクラスは表示されているので おそらく、アプレットにはmainメソッドを用いていないので表示されないのだと思うのですが・・・。 mainメソッドがないプログラムの場合はどうすれば良いのでしょうか・・・? 自分なりに、↓など調べてみたのですがどこがいけないのかわかりません。 http://mailsrv.nara-edu.ac.jp/~asait/java/applet/applet.htm http://sunjava.seesaa.net/article/57546363.html どこをどうすればこの場合、EclipseでJARファイルが作成できるのか、詳しく教えていただければ助かります。 一応、アプレットは↓の簡単なプログラムを試してみました。実行は出来ます。 import java.applet.Applet; import java.awt.Graphics; public class Sample extends Applet { public void paint(Graphics g) { g.drawString("こんにちは",10,10); } }

  • jarファイル起動時

    Swingでアプリケーションをつくりそれをjarファイルで クリックすると実行するようにしているんですが、 jarファイル起動時によく ----------------------------- ○○○○←アプリケーション名 バージョン名 起動中.... ------------------------------ などが四角いパネルで上のような情報が 表示されてから起動するようなswingのアプリケーションを作っている人の作品を幾つか見かけました、 どのようにして上のようなパネルを表示させているのでしょうか?

    • ベストアンサー
    • Java
  • 実行可能jarを実行できない

    PCを替えたら実行可能jarの実行に"javar -jar"が必要になりました。 ubuntu10.04(oracle java 1.6)のeclipseで作り、別のubuntu10.04(oracle java 1.6)なPCで使っていた実行可能COMMAND.jarがubuntu12.04(oracle java 1.7)で実行すると "バイナリファイルを実行できません" となります。 COMMAND.jarへのパスは通っています。 $ java -jar COMMAND.jar なら実行できます。 どうすればjavaコマンド無しに実行できますでしょうか。 2013年6月2日

    • ベストアンサー
    • Java
  • 実行可能jarファイルについて!

    実行可能jarファイルについて! java -jar Foo.jar Foo というやり方で、実行可能jarファイルにあるクラスの中から実行するクラスを指定できるという記述があったので、試してみたのですが、うまくいきません。 http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/java_primer/ExecutableJarfile.html どうしても、マニフェストファイルに書かれたクラスが実行されてしまいます。 マニフェストファイルはこちらの内容になります。 Manifest-Version: 1.0 Rsrc-Class-Path: ./ geronimo-jta_1.1_spec-1.0.jar s2-dao-1.0.49.jar co mmons-logging-1.1.jar poi-3.0-FINAL.jar aopalliance-1.0.jar s2-dao-ti ger-1.0.49.jar junit-3.8.2.jar teeda-core-1.0.13-sp7.jar geronimo-ser vlet_2.4_spec-1.0.jar cglib-nodep-2.1_3.jar s2-extension-2.4.40.jar s 2-tiger-2.4.40.jar easymock-2.4.jar teeda-webunit-0.2.2.jar teeda-aja x-1.0.13-sp7.jar teeda-tiger-1.0.13-sp7.jar ojdbc6.jar easymockclasse xtension-2.4.jar commons-lang-2.4.jar javassist-3.4.ga.jar teeda-xmlu nit-0.1.0.jar log4j-1.2.13.jar teeda-extension-1.0.13-sp7.jar ognl-2. 6.9-patch-20090427.jar junit-4.4.jar junit-addons-1.4.jar s2-framewor k-2.4.40.jar h2-1.0.69.jar Class-Path: . Rsrc-Main-Class: jp.co.tsys.sfi.batch.execute.TagOutputExecute Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader jarファイルは、Eclipseの実行可能jarファイルの出力で、エクスポートしました。 よくみると、Main-ClassがEclipseのクラスになっているので、そこが違うのかな、と予想しています。 なぜ、Eclipseのエクスポートを使っているかというと、ライブラリのjarファイル群をjarファイルに取り込むのに便利だと思ったからです。 →これさえできれば、ほかの方法で構いません。 どうかよろしくお願いします!

    • ベストアンサー
    • Java
  • java初心者 wavファイル再生について

    こんにちは。 趣味でプログラミングをしている者です。 javascriptでポーカーを再現するくらいです。 eclipse3.6でJAVAの勉強をしているのですが、 Applet.newAudioClip() について、質問させていただきます。 http://d.hatena.ne.jp/aidiary/20041003/1251379247 上記のサイトを参考にして ボールが壁に当たった時に wavファイルの 効果音を鳴らすように試みたのですが、 以下のようなメッセージが表示されてしまいました。 ----------------------------------------------------------- Exception in thread "main" java.lang.NullPointerException at sun.applet.AppletAudioClip.<init>(AppletAudioClip.java:48) at java.applet.Applet.newAudioClip( Applet.java:279 ) at many_balls.soundball.<init>( soundball.java:12 ) at many_balls.soundpanel.<init>( soundpanel.java:24 ) at many_balls.soundframe.<init>( soundframe.java:12 ) at many_balls.soundframe.main( soundframe.java:21 ) ----------------------------------------------------------- 効果音をなしにしたときは、描画されたのですが・・・ http://d.hatena.ne.jp/hhelibex/20090214/1234629150 上記のサイトを見て、ファイル名を   AudioClip sef = Applet.newAudioClip( classname.class.getResource("/fimename.wav") ); とか、 sef = Applet.newAudioClip( classname.class.getClassLoader().getResource("filename.wav") ); とかにしても、同様のエラーメッセージがコンソール部分に 表示されてしまいました。 初心者なもので、エラーメッセージの意味がよくわからないのですが。 ファイルを置く場所が違っている、ということなのでしょうか? getResource( arg ) の引数の指定の仕方が違うのでしょうか? もしよろしかったら教えていただけないでしょうか よろしくおねがいします。

    • ベストアンサー
    • Java
  • JARファイル内でのファイルの作成

    JARファイル内に格納されたクラスファイル(MainWindow.class)を実行して、同じJARファイル内にバイナリファイル(DataFile.bin)を作成したいのですがどのようにしたらよいでしょうか。  JARファイル内のクラスファイル(MainWindow.class)に記述された、randomAccessFile(string,"rw")命令によって、MainWindow.classが格納されているのと同じJARファイル内にDataFile.binを新規作成したいと思っています。  ちなみに、作成したファイルは、 URL url=null; url=getClass.getResource("DataFile.bin")で呼び出したいと思っています。  インターネット等で検索しているのですが、なかなか見つからなくて困っています。すみませんがどうかよろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう