リナザウことSL-C760で動くJavaアプリケーションを開発する。開発母艦は素直にLinuxだ。でも開発環境にNetBeansを使ったら、ボタン一発でcvmもXletもその場でシミュレーションできるんだゾー!
開発環境はRed Hat Linux7.2です。UNIX USER様がつけてくださったCDを使ってます。
まずはJ2SDKをセットアップしなければならない。最近はLinuxでも、もらってきてビンッと実行すれば、まるっと解凍ディレクトリ「j2sdk1.4.2」とかいうのが現れるので、それをお好きなところにお持ち帰りになればよくなっている。便利な時代になったものだ。一応root権限で/usr/j2sdk1.4.1に置いた。そしてシンボリックリンク/usr/javaを貼った。
そうそう、もうひとつ。Personal Profileのセットアップには、kshが必要だ。これはフツーにRHL7.2をインストールしたのではついてこない。UNIX USER様のCDでは2枚構成の2枚目のほうにある。2枚目をドライブに食わせてGNORPMで読み取って、pdksh-5.2.14-13というヤツをひとつ選んでインストールする。これはkshのクローンなんだそーだ。
さてPersonal Profileだ。これは以下のファイルをもらってくる。
j2me_pp-1_0-src-linux-i686.zip
これは、適当なところで解凍すると「personal」というフォルダがごろんとできる。わたしは/home/noniko/personal というところに、まあ、置いた。
あと、ドキュメントは絶対もらってこないと、たぶん手も足も出ない。
j2me_pp-1_0-doc-linux-i686.zip
これはそのまま解凍するとバラバラになる。「ppdocs」というフォルダを作って、そこで解凍・・・するわけないよねのに子が。思いっきりホームディレクトリにけちらかして、あとからそのフォルダに拾い込んだ。
PP-release-notes.html というのにセットアップ方法が、
PP_Programmer_Guide.pdf というのにサンプルの動かし方が、書いてある。
ホームディレクトリの環境設定ファイル .bash_profile はこんなパス設定をした。
PATH=$PATH:$HOME/bin:/usr/java/bin:$HOME/personal/build/linux-i686/bin
export PATH
JAVA_HOME=/usr/java
export JAVA_HOME
実行ファイルcvmの階層は深いので、シンボリックリンクを貼った。
/home/noniko/personal/build/linux-i686 フォルダにこんなスクリプトファイルを置いた。
#!/bin/bash
make J2ME_CLASSLIB=personal JDK_HOME=/usr/java \
CVM_GNU_TOOLS_PATH=/usr/bin J2ME_BUILD_STATUS=fcs \
CVM_DEBUG=true CVM_JVMDI=true CVM_SYMBOLS=true
アンダースコアがすごくたくさんあって、当然だがひとつでもはずすとエラーになる(なった)。スペルミスには気をつけなければならない。
これはCeleron 900MHzのptipleでも、結構時間がかかった。終わっても、「おめでとうございます、無事にインストールされました」などのメッセージはなく、黙ってプロンプトが出るだけだ。
NetBeansに組み込む前に、一応このPPがちゃんと動くかどうか確かめる。/home/noniko/personal/build/linux-i686 すなわち/home/noniko/pp のもとでの作業である。
まず、記念すべき初起動。
$cd democlasses
$cvm HelloWorld

わっびっくりした、という感じ。上のドキュメントにちゃんと例が出てるし特に載せる必要もないのだろうが、あまりにもデカくてここまでしなくてもいいのにと思ったので。ちなみにこの赤帽のデスクトップの色、あのしろうとくさい青色からちょっといじったのヨ。うぷぷ。
Personal Profileの最大の目玉のように言われているXletアプリケーションは同じdemoclassesフォルダから
$cvm com.sun.xlet.XletRunner -name SimpleXletDemo -path .
とやれば、三角野郎がフレームに載っかって出てくる。まあそれは載せない〜。
CVMが正常に動くことがわかったので、NetBeans3.5.1を入れる。これもバイナリファイルをダブルクリックするだけで豪華なインストーラが立ち上がる。インストール先のフォルダは/home/noniko/NB351にした。
Personal Profileを用いた開発のために、新しいプロジェクトを作った。メニューの「Project」->「Project Manager」で「New...」ボタンを押し、プロジェクト名を「PP」とした。これで、Project PP」てのができる。
新規プロジェクトにはなんのファイルシステムもマウントされていない。そこで、まずマイ作業用フォルダをつくってそれをマウントすることにした。/home/noniko/pp/nonippというディレクトリを作る。そいつをマウント。
「File」->「Mount Filesystem」->「Local Directory」で、あとはファイル参照で探してくる。
同様に、democlassesフォルダもマウントする。外部コマンドの設定がちゃんと行ってるか、デモの起動で試してみたいわけだ。
NetBeansの強いのは次の作業だ。参照ライブラリはマウントしてしまえばいいのだ。
「File」->「Mount Filesystem」->「Archive Files」で、ファイル参照で探してくる。
ちなみに、下の/home/noniko/pp は /home/noniko/personal/build/linux-i686 のシンボリックリンクだ。
/home/noniko/pp/lib/personal.jar
/home/noniko/pp/democlasses.zip
/home/noniko/pp/btclasses.zip(なんだかわかんないけどこれもあったほうがいいかなと思って)
/home/noniko/pp/testclasses.zip(同上)
とバカバカマウントしちゃう。
これも、いくつかマイアプリを作ってみたあとのものです。ずら〜とファイルがぶらさがってるのがマウントしたdemoclassesフォルダ。
普通の、とはXletを使わないということだ。さっきのくそでけえHello Worldもそのひとつ。
まず、「Tools」->「Options」を出す。「Execution Types」を右クリックして「New」。
これはもうすでに作っちゃったあとです。
ここでは命名して誕生させるだけだ。「cvmappExecution」とした。
すると、上の図ではすでに作っちゃったあとなのだが、リストに加わる。このリストからあらためて「cvmappExecution」を選択して、そのプロパティの編集画面を右側ペインに出す。
![]()
「External Process」は、デフォルトのj2sdk1.4.2のための実行コマンドになっている。「...」ボタンを押して、広い編集モードにする。

J2SEのjavaを起動させるためのコマンドである。ここの「Argument Key」というのを参考にすればよい。このように書き換えてみた。

チョッチ見えにくいのだが、{filesystems}{:}{classpath}の三つのカッコの間には空白はなくて、そのあとに空白を一個ずつ挟みながら{classname} {arguments} と続く。
これを使って起動テストだ。マウントしたdemoclassesフォルダの中から「HelloWorld」を選んで、右クリックして「Properties」を選ぶ。
出てきたウィンドウの「Execution」タブをつつく。「Executor」が「External Execution」になっているが、クリックするとリストが表示されるようになるので、そこから「cvmExecution」を選ぶ。

すみません。これは後述のXletExecutionを選んでしまったところです。とにかくこんな感じ。
で、「HelloWorld」を選んどいて、ツールバーの三角実行ボタンを押すか、ファイルを右クリックして「Execute」とやれば、さっきのあのゲタみてえなウィンドウがひょいっと現れるのだ!
パッケージに入ったアプリだってへっちゃらだ。いつものJava開発のように、マウントしたファイルシステムにパッケージtestを作って、Hello とか出力させる簡単なコンソールアプリを作ってみる。
package test;
public class Hello {
public static void main(String[] args){
System.out.println("Hello");
}
}
みたいなヤツ〜。これもExecutorをcvmExecutorにして、三角ボタンをポチっとな。

上のほうにガチャガチャ出てるのは、いつもことだ。最後に「Hello」と出ているのが御覧いただけるだろうか。
この勉強は言うまでもないが(あるかな)月刊誌「JAVA Developer(ソフトバンク パブリッシング(株)発行)」の連載「ハンズオンJava2」に基づいてやっている。そのサンプルコードはコマンド入力のargumentsを受け取って処理しているが、このargumentsはこれまでと同様メニューの「Build」->「Set Arguments...」に入れてやれば読んでくれる。
だがXletアプリケーションの開発ができなきゃあ面白くない。果敢に挑戦する。同じように「XletExecution」というExecutorを追加してコマンドを編集する。
Process:/home/noniko/personal/build/linux-i686/bin/cvm は、さっきと同じだ。
Arguments: の欄に
com.sun.xlet.XletRunner -name {classname} -path {filesystems}:{classpath} -args {arguments}
と入れる。
エクスプローラのdemoclasses フォルダの中から、SimpleXletDemoを選んで、Executorを「XletExecution」にして、実行ボタンをプチ。

いや、だってあの三角野郎って肖像権キビシイらしいっすよ。このようにXletの実行もここからできるということがわかった。
実行、はできた。開発、はどうか?上述の記事をお手本に自分でXletアプリケーションを作る。新規作成して、エディタで打っていくと・・・

javax と打ったところでもう「microedition」パッケージを補間してくれるのだ。バージョンが上がってからNetBeansの補間機能は非常に上がった。
public class HelloXlet implements Xlet, ActionPerformed {
と打っていくと・・・

わっ、びっくりした。いきなり現れる。要するにこれらを実装したいならさせてやるがどうヨ、ときいてくるのだ。どーぞお願いいたしまする。「Process All」とやる。

このように自動で挿入してくれるんで、あとはその中身を作ってやればいい。もお、チョーラクチン。
ただひとつだけ工夫がある。
NetBeansで「実行」ボタンを押すと実行してくれるのは、mainメソッドのあるクラスだけなのだ。これ、どうにかできるのかもしれないが、今のところはダミーのmainメソッドを作ってやればオッケーだ。このHelloXletFrame は、お手本ではmainメソッドを実装しない。でも、隅っこのほうに
public static void main(String[] args){
System.out.println("HelloXletFrame called...");
}
みたいに書いておけば、全然悪さをしないはずだ。そうするとHelloXletFrameクラスは、実行可能クラスとして振る舞える。![]()
実行してやれば、マイXletアプリ、といってもお手本写しただけだけど、が立ち上がる。
これはラクだ!特にSolarisユーザで、Linuxのターミナルやシェルの操作に慣れていないわたしとしては!もうNetBeans上で操作すれば、赤帽も青傘も関係ないもんな。すごいぞNetBeans!