怒りのJava学習 このページをアンテナに追加 RSSフィード

Java初心者が
Java学習の途中で感じた怒りを
叩きつけるブログ

 このブログでは
※コンパイルエラーの99%は入力ミスで出来ています
※コンパイルエラーの1%は故意の省略で出来ています

現在皆様のエラー例を募集中



↓このブログの執筆方針
はじめに

↓ブログランキングへのリンク

クリックでランキングのポイントが加算される
今のところどうでもいい

2009-06-12 よーしよし!

[]最終動作報告


 前回までのコメントまで含めて判明した事により、JARへのライブラリ付加の自動化は無理だと分かったので、ダブルクリックと黒窓でのコマンドライン実行での動作検証を行う。


 ダブルクリックだと、フリーズなのかエラーなのか分からないので、黒窓で実行する。

 まず、JARファイルが作られているdistフォルダに移動する。JARを実行する。

C:\Documents and Settings\java1rou\My Documents

\NetBeansProjects\MyFirstShape\dist java -jar MyFirstShape.jar

Exception in thread "main" java.lang.

IllegalArgumentException: Resource not found "resources/"

【以下省略】

これは簡単だ。セッティングの解説にあった症状だ。そして以前有った症状と同じで、NetBeans上で実行する時とJARファイルから直接実行する時で画像等のファイルを置くべき場所が異なるために起こるのだ。resourcesフォルダをdistフォルダ内にコピーしてやる。

C:\Documents and Settings\java1rou\My Documents

\NetBeansProjects\MyFirstShape\dist java -jar MyFirstShape.jar

Exception in thread "main" java.lang.

UnsatisfiedLinkError: no jogl in java.library.path

 うむ、これもかつてNetBeans上で発生したエラーだな。java.library.pathにネイティブライブラリを設定すればいいのだ・・・どうやって?

 5月29日のたけチン氏のコメントに

環境変数「libs.xith3d.natives.classpath」が未定義なら、直接的に書いてらどうでしょうか?

Djava.library.path="C:\usr\lib\xith3d\native"

とあった、ので、環境変数をそのように追加してやろうかと思ったのだが、Windows環境変数(スタート→マイコンピューターを右クリック→プロパティ→詳細設定タブ→環境変数)のPathは

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;c:\tex\bin;C:\gs\gs8.61\bin;C:\gs\gs8.61\lib;C:\Program Files\Java\jdk1.6.0_07\bin;C:\Program Files\QuickTime\QTSystem\

といった感じで書かれていて、とてもたけチン氏のコメントのような書式ではない。ユーザーの環境変数もそうだ。「java.library.path」でググってみても設定を解説したそれらしいページがヒットしない。どういうことなのだろう?

 しかしここでハタと気がついた。環境変数をいじるって事は逆に言えば、それをしなければ動かない配布物を作ってしまうという事だ。それはイカン。なるべく基本的なJRE(Java環境プログラム=VM=バーチャルマシンのこと)のみで動く配布物でなければならない。と言う訳で、環境変数いじりは早々にあきらめて、ネイティブライブラリをdistフォルダにコピーしよう。

 まずは要求されているjoglのライブラリを持ってくる。設定ページの図にあった、\third-party\jogl\windows-i586\の場所にあるファイルを全てdistフォルダにコピーして、黒窓で実行してみる。

f:id:java1rou:20090612213856p:image

うむ!成功!×ボタンを押しても終了しない所もNetBeansでの実行と同じだ。他のネイティブライブラリは使われなかったのだろう。だが、他のプロジェクトでは必要になるかもしれない。

 なお、distフォルダの中にはlibフォルダがあり、ここにはプロジェクトに追加されたJARライブラリが収められている。もしかしてここにネイティブライブラリを放り込んでもうまく行くのでないか?と思って試してみた。メインクラスのあるフォルダはスッキリさせたいからね。

 しかし失敗。joglが無いというエラーが出た。どうも同じライブラリとは言っても扱いが異なるらしい。何とかならないものか。まあ何にせよ、NetBeans無しでも動かせるとは分かった。


 さあ、これで実験の環境は整った。あとはXith3Dの言語仕様を覚えて、レイヤー内に3D表示をさせられるか検証するのみだ。そしてうまく行けばXith3Dでゲーム開発を開始することになる。

 Xith3Dのホームページに3DRPGや、戦艦を操るゲームがサンプルとして置かれていたので、それらを参考にすれば大幅に開発期間を短縮できるはずだ。これは非常に嬉しい。


 少々疑問は残るが、うまく行ったので怒らないで終わる。

shinshin 2009/06/13 00:18 環境設定のpathとネイティブライブラリ用のパス設定は別物ですよ。Windowsの場合無指定でもカレントディレクトリにあるネイティブファイルを見に行ってくれます。他のWin32アプリでもdllはそうですよね。

ですから、NetBeansでネイティブライブラリを扱うソフトを扱う場合一番簡単なのはプロジェクトプロパティにカレントディレクトリを指定するところがありますので、そこを指定してネイティブライブラリを置くことです。

hikarunahikaruna 2009/06/16 02:30 私も、Javaでゲームを公開するに辺り、ネイティブライブラリの問題に直面しました。
環境変数パスに"./lib"を追加してから
jarファイルを実行するbatファイルを書くことで、一応ユーザーには、メインの.batファイルをダブルクリックするだけで良いというふうに解決しました。参考にどうぞ。

java1roujava1rou 2009/06/22 05:34 >パス設定は別物です
おっと、そうでしたか。他の日でたけチン氏が示して下さったように、ネイティブライブラリは実行時のオプションで指定していますね。

>他のWin32アプリでもdllはそうですよね。
 いや、実は恥ずかしながら、わたくしdllを扱ったことが無いもので、そういった勘が働かないんですよ。フリーウェアにラインタイムが必要だ、という場合も指示された通りにインストールしてるだけでして。(しかもそれでもうまく行かない場合が多いのですが。)

>プロジェクトプロパティにカレントディレクトリを指定
 これは便利そうですね。これなら配布ファイルの中身を整理することも出来そうです。「プロジェクトのプロパティ」→「実行」の「作業用ディレクトリ」の事でしょうか?

>環境変数パスに"./lib"を追加
 hikarunaさん初めまして。ようこそ。
 えーっと、つまりネイティブライブラリの入っているフォルダ/libをjarファイルのあるフォルダに設置してから
batファイルに
(1)jarファイルのある場所に移動
(2)jarファイルを実行
と書いたという事でしょうか?環境変数パスには相対座標も使えるんですねぇ。
ありがとうございます。

shinshin 2009/06/23 12:13 >>プロジェクトプロパティにカレントディレクトリを指定
> これは便利そうですね。これなら配布ファイルの中身を整理することも出来そうです。「プロジェクトのプロパティ」→「実行」の「作業用ディレクトリ」の事でしょうか?

そうです。そこにライブラリを置くことで解決します。ほかにもリソースファイル以外のファイル等を読み込むようなアプリの場合こういう設定が肝となってきてます。

おいらもゲーム作成でジョイスティック読み取りをJNIで使っていますし、JOGL(OpenGLのライブラリ)のDLLもそこにおいてます。

環境設定する場合はLD_LIBRARY_PATH二定義します。Linux等はこれに「.」と書くことでカレントディレクトリをよみにいくようになります。でも、基本的にグローバルなOSレベルで設定する場合は絶対パスが必要なものに限定したほうがいいですね。そのアプリでしか使わないやつはつど設定した方がいいかと思います。

ほかにもjarのなかにつっこんでマニフェストファイルで指定するという方法もありますが、外部ライブラリの場合ライセンスに注意ですね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/java1rou/20090612/1244811186
リンク元
Connection: close