最終動作報告



 前回までのコメントまで含めて判明した事により、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フォルダにコピーして、黒窓で実行してみる。

うむ!成功!×ボタンを押しても終了しない所もNetBeansでの実行と同じだ。他のネイティブライブラリは使われなかったのだろう。だが、他のプロジェクトでは必要になるかもしれない。
 なお、distフォルダの中にはlibフォルダがあり、ここにはプロジェクトに追加されたJARライブラリが収められている。もしかしてここにネイティブライブラリを放り込んでもうまく行くのでないか?と思って試してみた。メインクラスのあるフォルダはスッキリさせたいからね。
 しかし失敗。joglが無いというエラーが出た。どうも同じライブラリとは言っても扱いが異なるらしい。何とかならないものか。まあ何にせよ、NetBeans無しでも動かせるとは分かった。


 さあ、これで実験の環境は整った。あとはXith3Dの言語仕様を覚えて、レイヤー内に3D表示をさせられるか検証するのみだ。そしてうまく行けばXith3Dでゲーム開発を開始することになる。
 Xith3Dのホームページに3DRPGや、戦艦を操るゲームがサンプルとして置かれていたので、それらを参考にすれば大幅に開発期間を短縮できるはずだ。これは非常に嬉しい。


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