前回の「プログラムのライフサイクルやイベント駆動を知る」までで、駆け足ですがJavaプログラミングの基本中の基本やどのようにしてプログラム全体を組み立てるかを学んできました。
今回から数回は、iアプリとMIDlet(MIDPアプリ)を作成するうえでのテンプレートを紹介し、そこに機能を肉付けしながらケータイJava(本連載では、携帯電話/PHS/スマートフォンなどの端末をまとめて「ケータイ」と表記します)のプログラミングのポイントを押さえていきます。
あらかじめ理解しておいてもらいたいのは「目的が同じプログラムは同じような作り方になるものの、それ以外の方法で実現できることもある」ということです。今回紹介するテンプレートは、ケータイJavaアプリを作るための最もシンプルな方法の1つではありますが、必ずしもその作り方だけではない、ということに注意してください。
今回のテンプレートは、ごく簡単なアプリとして用意しました。まずは、動作を見てみることにしましょう。以下のそれぞれの動画のスタートボタンを押してください。再生すると分かりますが、このテンプレートはとても簡単なデジタル時計になっています。そして任意のキーを押すと、ボタンが押されたことを通知しています。
上のFlash動画はDoJaの「iアプリ開発キット(以下、「iDK」)」と「MIDPアプリ開発ツール(以下、「WTK」)」で、それぞれテンプレートアプリを動作させたものです。まだiDKとWTKをセットアップしていないならば、それぞれ連載第2回のiアプリ開発キットのセットアップとMIDPアプリ開発ツールのセットアップを参照してセットアップしてください。
テンプレートアプリのプロジェクトはそれぞれ以下からダウンロードできます。
上記を展開すると、作成されるフォルダを、iDKなら「C:\Java\iDK\apps」の下に、WTKなら「C:\Java\WTK\apps」の下にコピーしてください。なお、iDKとWTKのインストール先は、本連載ではデフォルトの位置から変更しているので、注意してください。
ソースファイルはそれぞれ「src」というフォルダに含まれています。例によってテキストエディタで開いておくとよいでしょう。
WTKの2.5.2では、プロジェクトの保存先が変更されています。リリースノートには、以下のように記載されています。
「マルチユーザー機能により、同じマシン上の複数のユーザーがインストールされている1つのWireless Toolkitを使用できます。インストーラは製品をインストールした後、ユーザーアカウントごとに、インストールファイルのサブセットをインストールディレクトリから個別の作業用ディレクトリ(j2mewtk)にコピーします。作業用ディレクトリのデフォルトの場所(workdir)は、一般的に次のいずれかの場所になります。
Windows: | C:\Documents and Settings\User\j2mewtk\2.5.2 (User はユーザーのアカウント名) |
---|---|
Linux: | ~/j2mewtk/2.5.2 (~ はユーザーのホームディレクトリ) |
一般的に、作業用ディレクトリは、ユーザーがアプリケーションを作成したり、カスタマイズを行ったりするために使用します。この機能の詳細は、『ユーザーズガイド』を参照してください。」
Windows Vistaの場合は「C:\User\
WTKのインストール先の「apps」フォルダにTemplateMIDletをコピーすると、初回のプロジェクトを開くダイアログでは、以下のように表示されます。
ここでTemplateMIDletを選択すると、そのプロジェクトが作業用ディレクトリにコピーされます。Vistaの場合は、以下の場所になります。
次回からは、この作業用ディレクトリから読み込まれます。作業用ディレクトリにプロジェクトがある場合は、以下のようにプロジェクト名が太字になり、上にソートされてきます。
気を付けなければならないのは、この状態でいくらインストールフォルダのソースファイルを変更しても、作業用ディレクトリのソースファイルには反映されないということです。筆者はリリースノートを読まずに作業して少しだけハマりました。皆さんはお気を付けください。
さて読者の環境では、前章で説明したテンプレートは動作しているでしょうか。このテンプレートは、本連載で前回までに解説したJavaの文法でほとんどカバーできていますが、まだ解説していない新しい技術も使われています。
本連載の第3回目の「“鋳型”にはめて『クラス』と『インスタンス』の概念を学ぶ」では、クラスの宣言を以下のように説明しましたが、クラス名を省略して、一気にインスタンスまで作成する方法があります。それが今回説明する「匿名クラス」です。
class クラス名 { クラスの内容 } |
TemplateAppli.javaでは、以下の個所です。
17 canvas = new Canvas() { |
TemplateMIDlet.javaでは、以下の個所です。
22 canvas = new Canvas() { |
DoJaにもMIDPにも「Canvas」というクラスがあって、上記で抜粋したコードは、両方とも最初の行でCanvasクラスからcanvasインスタンスを生成しています。しかし、通常ならば「canvas = new Canvas();」とセミコロンで終わるはずのインスタンス生成が、ブロック開始括弧で何行も続いています。
まず、なぜ「canvas = new Canvas();」ではいけないのか、という説明をしましょう。ちょっと長くなりますが、大切なことなので読み飛ばさないでくださいね。
Canvasクラスは、DoJaでもMIDPでも、「public abstract class Canvas」と宣言されています。つまり、Canvasクラスは抽象クラスなのです。クラスなのでインスタンスを生成できるのですが、そのままでは足りていない部分があって、そこはプログラマーに足りていない部分を補完してもらわなければならない、ということを「abstract」というキーワードで表しています。
プログラマーがどこを補完しなければならないのかは、それぞれのクラスのJavadocを見れば分かります。
上記はCanvasクラスのpaintメソッドあたりのJavadocです。それぞれのCanvasクラスのpaintメソッドだけに「abstract」というキーワードがあるのが見て取れます。プログラマーは、このabstractが付いたメソッドを実装しなければなりません。インターフェイスに定義されているメソッドをすべて実装しなければならないのと同様、抽象クラスでabstract宣言されているメソッドもすべて実装する必要があるのです。
次ページでは、匿名クラスの宣言の仕方について説明し、今回のテンプレートについてDoJaとMIDPに分けて詳細に解説していきます。
Javadocは最初のうちは必ず見なければならないドキュメント、ということでしたね。DoJaならiDKインストールフォルダの「doc\index.html」を、MIDPならWTKインストールフォルダの「docs\api\midp\index.html」がすべてのJavadocのインデックスです。今後、頻繁にアクセスすることになるので、お気に入りに入れておきましょう。
Copyright © ITmedia, Inc. All Rights Reserved.