戻る 01. 最初のプログラム
コンパイル方法
次へ

開発ツールのインストールも完了しいよいよプログラミングに入りましょう。
私はJAVAのプログラムもした事が無いのでJAVAの勉強もしながら説明します。

わかりやすくC言語と対比しながら説明していきます。

まずは最小のプログラムです。


/*=============================================================================
	sample1	まずはおなじみ	Helo World!
-----------------------------------------------------------------------------*/
import	javax.microedition.midlet.*;//Cでのincludeと同じようです
import	javax.microedition.lcdui.*;//必要なクラスを呼び出しています。
/*=============================================================================
	メインクラス
-----------------------------------------------------------------------------*/
public class sample1 extends MIDlet
{
	/*========== アプリの開始 ==========*/
	public void startApp() {//ここから実行されます。必ず必要です
		sample1Canvas canvas=new sample1Canvas();
		Display.getDisplay(this).setCurrent(canvas);
		//スレッド
		Thread thread=new Thread(canvas);
		thread.start();
	}
	/*========== アプリの一時停止 ==========*/
	public void pauseApp() {//一時停止時に呼ばれます。必ず必要です
		//中身は無くても構いません
	}
	/*========== アプリの終了 ==========*/
	public void destroyApp(boolean unconditional) {//終了時に呼ばれます。必ず必要です
		//中身は無くても構いません
	}
}
/*=============================================================================
	キャンバスクラス
	スレッドを作ったので以後の処理はすべてここに書きます。									
-----------------------------------------------------------------------------*/
final class sample1Canvas extends Canvas
    implements Runnable
{
	public void run() {
		while (true) {
			repaint();
			//スリープ
			try {
				/*携帯での実行速度は機種によりかわるので
				Waitを入れて速度調整をする必要があります。*/
                		Thread.sleep(100);
			}catch (Exception e) {
			}
		}
	}
	public void paint(Graphics g)
	{
		g.drawString("Hello World!",getWidth()/2,getHeight()/2,g.HCENTER|g.VCENTER);
		/*	唯一のプログラムらしい部分です。(笑)
			Hello World! の文字を画面サイズを測り画面の真中に描画します。*/
	}
}
まずMIDletから継承して基本クラスを作成します。
このクラスはsample1としておきます。
JAVAプログラムはクラスが元となっているのでまず継承から始まります。

public void startApp()
public void pauseApp()
public void destroyApp(boolean unconditional)
MIDPクラス内でこの三つのメンバ関数をオーバーライドします。
これはMIDPプログラムには必ず必要です。

sample1Canvas内でrun関数が呼ばれています。
名前の通りここが最初に実行されます。
(実際には今回の例にはありませんがコンストラクタが先に呼ばれます。)

そしてさらに中でwhileループがあります。
以後この中でループを続けます。
必要な処理はこの中に追加していきましょう。

今回ではrepaint();Thread.sleep(100);が呼ばれています。
repaintは描画命令が詰まっています。
これはpaint関数が呼ばれるようになっています。
paint関数内ではg.drawStringが呼ばれていますね。
これは文字列を描画する命令です。

g.drawString("Hello World!",getWidth()/2,getHeight()/2,g.HCENTER|g.VCENTER);
引数の意味は順に(描画する文字列,開始X座標,開始Y座標,描画オプション)です。
今回の場合は画面の真中に描画しますのでgetWidth()getHeight()画面サイズを取得して
g.HCENTER|g.VCENTERで開始位置を基準として真中になるように文字が描画されます。

Thread.sleep(100);は実行を一定時間停止します。
なぜそんなことをするかというと,携帯では処理速度というのは一定ではありません。
iアプリで開発をしていた人にはおなじみでしょうが機種により速度差と言うのはかなりありました。
残念ながらJ-PHONEのJAVAアプリでも現状は同じです。
100ミリ秒処理を停止して一定以上早くならないようにします。

プログラムの説明は以上ですけど今度は実行するにはどうするか?ですが...実は結構めんどいです。

といっても決まりごとみたいなものなのでさくっと作って使いまわしましょう。(笑)
まずMANIFEST.MFと言う名前のファイルを作ります。
テキストエディタで以下の分を打ってください。
MIDlet-1: sample1,,sample1
MIDlet-Name: sample1
MIDlet-Vendor: bu-nyan
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
上二つはクラス名を入れます。違うプログラムを作る場合はクラス名を書き換えましょう。
その次はVender名,まぁ開発したところの名前ですね。個人では自分の名前でも入れときましょう。
次はバージョンです。とりあえず1.0にしときましょう。
後ろ二つはJAVAのバージョンみたいなものだと思います(汗)同じで良いでしょう(^^;

さぁてコンパイルしましょう。
コマンドラインで順に打っていってください。
javac -bootclasspath c:\J-PHONE-SDK\stubclasses.zip *.java
preverify -classpath c:\J-PHONE-SDK\stubclasses.zip sample1
preverify -classpath c:\J-PHONE-SDK\stubclasses.zip sample1Canvas
jar cfm sample1.jar MANIFEST.MF -C output .
一行目のjavacはJAVAのコンパイラです。
c:\J-PHONE-SDK\stubclasses.zipにコンパイルに必要なファイルが入っているようです。
2行目と3行目はコンパイルして出来た*.classファイルを検証にかけています。
よくわかりませんけど必要です(苦笑)
4行目はMIDPの実行形式のjarファイルに変換する作業です。
具体的には先ほど出来たファイルとリソースを結合しています。
さてこれでjarファイルが出来て実行する準備は出来ました。
でもまだ実行できません...
今度はjadファイルと言うのを作る必要があります。

以下のテキストを書き入れてください。
MIDlet-Jar-Size: 1559
MIDlet-Jar-URL: sample1.jar
MIDlet-Name: sample1
MIDlet-Vendor: bu-nyan
MIDlet-Version: 1.0
さて中身説明です。
まず一行目MIDlet-Jar-Sizeこれはjarファイルのサイズです。
コンパイルした後に出来たjarファイルのサイズを書き入れてください。
2行目い3行目は見ての通りjarファイル名とクラス名を書きます。
4行目と5行目もすぐわかると思います。さきほどのMANIFEST.MFと同じのを書き入れてください。
ここで問題は1行目のMIDlet-Jar-Size:という項目です。サイズですから作るごとに変化していきます..
そうです!これは毎回書き換えなければいけません!
うひゃぁーなんじゃそりゃ!!Σ( ̄□ ̄||)
修正を加えるごとにファイルサイズを調べて書き入れる...
ものすごく手間がかかりますね...正直やってられないです...どうしましょう?(^^;
...素直に書き換えるしかないです。

しかし手順は決まっています。
jarファイルのサイズを調べてMIDlet-Jar-Size:にそのファイルサイズを書き入れる。
よっしゃぁ!作っちまうか♪(^^)
ということで自動的に書き入れるツールを作りました。v(^^)v
Download
jadファイルとjarファイルがあるフォルダに展開してコンパイルした後に実行するだけで
自動的にMIDlet-Jar-Size:にファイルサイズを書き入れます。
これでかなり楽になりました♪

それでは次は実行する方法です
スタートメニューでJ-PHONEのJ-SKY Application Emulatorを起動して
先ほど作ったjadファイルを選択してください。
無事実行できたでしょうか?

おかしければ最初から確認しなおしてみてください。(^^;