jarはどこだっ
確かにNetBeans(version5.5)は便利ではある。
スペルミスによるコンパイルエラーは未然に防げるし、メソッドの不正な呼び出しもすぐ分かる。
大きなソースを書き上げて、一発で構築(コンパイル)が完了したときは感動したものだ。
だが、ファイルの管理になると途端に使用者に負担がのしかかる。
と言うか、わけ分からん。
まず、ネットゲームの基本として、とりあえずサーバーと接続するだけのクライアントプログラムを作ろうとした。ユーザーに分かりやすいようにウインドウを表示して接続状況・アップデート状況を示し、ゲームのスタートボタンを表示する。(ボタンをおすとゲームサーバーに飛ぶ)
設計としては、メインプログラムが進行状況に応じ(1)ログインサーバー(2)パッチサーバー(3)ロビーサーバー(4)ゲームサーバーに接続し直す、とし、それぞれに別々のウインドウを表示する、とした。
各ウインドウは別々のフレームクラスで定義し、呼び出す。ファイルの配置は「新流儀Javaゲームプログラミング 」に従って内部クラスとする。なぜならゲーム情報の受渡しとかが面倒だから。(内部クラスにすれば外部クラスのフィールド値を自由に使える。)
ところがこれが大きな落とし穴。
NetBeansでは初めからJFrameクラスのextendsとしてファイルを作らないとGUI作成補助を受けられない。しょうがないから同じプロジェクト内部でJFrameの継承クラスとしてFrameAを作成して、そのコードをメインプログラムの内部に手動でコピーすることにした(内部を外部レベルに移動するというコマンドはあるが、逆は存在しないから)。GUI作成補助の効果はすばらしく、あっという間にきれいなフレームを作成できた。レイアウト情報もソース内に生成されているのでありがたく頂戴する。
しかし実行するとウインドウは出ず、なぜか先日作ったWEBアプリケーションが作動してしまう。メインプログラムとWEBアプリは別プロジェクトなのに。
訳が分からないのでメインプログラムをJCPadで実行することにする。こちらはよけいな機能がない分何が起こっているのか理解しやすいからだ。
するとレイアウト情報がない
veldeclnt/Main.java:353: パッケージ org.jdesktop.layout は存在しません。 org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout .GroupLayout(getContentPane()); ^
ときた。まあ、これは俺が不注意だったのでしかたない。確か以前読んだNetBeansのGUI作成マニュアルにIDE外部への配布時の方法が書いてあったからそれを使おう。
スタンドアロンの GUI アプリケーションの配布と実行
GUI アプリケーションの実行時に Swing レイアウト拡張ライブラリが自動的に使用されるように、プロジェクトを構築すると、JAR (およびプロジェクトのクラスパスにあるその他の JAR ファイル) が自動的に dist/lib フォルダにコピーされます。また、アプリケーションの JAR ファイルの manifest.mf ファイルで Class-Path 要素に各 JAR ファイルが追加されます。
GUI アプリケーションを IDE 外に配布する準備を行うには、次の手順に従います。
1.プロジェクトの dist フォルダ (lib フォルダを含む) を ZIP アーカイブに圧縮します。
スタンドアロンの GUI アプリケーションをコマンド行から実行するには、次の手順に従います。
1.プロジェクトの dist フォルダまで移動します。
2.次のように入力します。
java -jar.jar
ここで一言いわせてもらう。
便利になったはずなのに
なんでこんな面倒なことを
せにゃならんのだッ!!
ダブルクリック一発で起動できる
jarファイルを作れ!
このいかにも技術者が書いた「こういう方法があるから使いこなしてね」的なモノ言いが、ムカつく。そういうのを不便というのだッ!
しかしまあ、今はそれはいい。本筋から離れるからな。
でjarを探すが、肝心のdistフォルダが存在しない。
もちろんFrameAクラスの方でコンパイル(構築)している。NetBeansに戻り、プロジェクトの所属・所在を確認するが、やはりそのプロジェクトフォルダの中を見ていることが確認されただけ。
ふと思いだして、もう一度構築(コンパイル)する。その様子をモニターしながら。
なんと、どういうわけか別のプロジェクトとして作動している!しかもそのプロジェクトのソースは開いてもいないのに!
そうなのだ。実行時になぜか起動したWEBアプリのプロジェクトとしてコンパイルされていたのだ。信じられないがそうだったのだ。
プロパティを再度確認したが、メインプログラムもFrameAもWEBアプリとは別プロジェクトとして登録されていた。全く理解しがたい。一体全体どうなっているのか?
試しにWEBアプリのプロジェクトを削除してみた。もともと間違いで作ったものだ。惜しくは無い。
今度はちゃんと元のプロジェクトフォルダ内にdistフォルダが作られた。なんのエラーも発生せずにだ。おかしいではないか?もし”WEBアプリのプロジェクト”に登録されていたのなら、
”WEBアプリのプロジェクト”フォルダが存在しません!
とか新しく”WEBアプリのプロジェクト”のフォルダを作ってそこに出力するとかするはずだろう。これではIDEが適当に選んだプロジェクトフォルダに出力しているとしか思えない。
ゴラッ!
SUNのボケ社員!!
バグってるぞ!!!
中途半端なモン
出すなぁぁぁぁ!!!!
なお、出来たコンパイル物をIDEで実行したらちゃんとウインドウが出現した。
(すぐ消えたが|||orz(涙))
もうNetBeansやめてEclipseに乗り換えようかな。バグがある上に、唯一の手がかりであるオンラインマニュアルは読みづらくてしかもほとんどは英文だし。
大学生協にはNetBeansの解説書は一冊もないのにEclipseの本は山ほどあるし、フレームワークの本もEclipse前提で書いてるし。
あ〜あ、時間を無駄にした。