ビジュアルモバイルデザイナのカスタムコンポーネント: モバイルアプリケーション用の待機画面の作成
Java ME アプリケーションが適切に動作するために、ネットワークへの接続が必要になることがよくあります。ところが、ワイヤレスネットワークは現在でも比較的低速です。ネットワーク接続やデータ転送を待機するバックグラウンドタスクによってアプリケーションが一時停止した場合に、表示画面が完全に固まってしまったのか、中止してあとでやり直したほうがいいのか、判断に迷うことがあります。このようなユーザーにとって不愉快で、ありがちな事態に、開発者はどのように対処したらよいでしょうか。
答えは「待機画面」を追加することです。待機画面では、ユーザーがバックグラウンド作業 (ネットワークへの接続など) のブロックを実行したり、作業の進捗状況を表示したり、アプリケーションが正常に動作中であることをユーザーに通知するメッセージを画面に表示することができます。このチュートリアルでは、ビジュアルモバイルデザイナ (VMD) を使用して、カスタマイズ可能な待機画面カスタムコンポーネントを含む待機画面の作成を簡素化し、アプリケーションフローに追加できます。
NetBeans でのモバイルアプリケーション開発に習熟していない場合、次に進む前に「NetBeans Java ME MIDP 開発のクイックスタートガイド」から始めることをお勧めします。
目次
要件
このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。
はじめに: 待機画面コンポーネントの動作方法
待機画面コンポーネントのためのバックグラウンドタスクの作成には、2 種類の方法があります。取消可能タスクインタフェースを実装するクラスを記述するか、または簡易取消可能タスクリソースを使用できます。setTask() メソッドを使用して、バックグラウンドタスクを待機画面に割り当てることができます。
待機画面コンポーネントでは、バックグラウンドタスクの完了時に、表示可能な別のオブジェクトへの切り替えが自動的に行われます。タスクが正常に終了した場合、待機画面は setNextDisplayable() メソッドによって提供される画面に切り替わります。タスクが正常に終了しなかった場合、待機画面は setFailureDisplayable() メソッドによって提供される画面に切り替わります。デフォルトの表示可能なオブジェクトが設定されていない場合、待機画面は setNextDisplayable() メソッドで指定される画面に切り替わります。次に表示可能な画面が設定されていない場合、待機画面は以前に表示された画面に戻ります。
このコンポーネントは、MIDP 2.0 デバイスプロファイルがサポートされたアプリケーションでのみ使用できます。
サンプルアプリケーションのインストールと実行
始める前に、チュートリアルの最終結果を確認します。
次の手順で waitscreenexample サンプルアプリケーションをインストールします。
- waitscreen.zip をダウンロードします。
- ファイルを展開します。
- IDE で、「ファイル」>「プロジェクトを開く」を選択し、展開したファイルがあるフォルダを選択します。
- 「プロジェクト」ウィンドウを開きます。画面は次のようになります。
- 「プロジェクト」ウィンドウでプロジェクトノードを右クリックし、「プロジェクトを実行」を選択するか、F6 キーを押します。アプリケーションが実行されると、エミュレータウィンドウが開き、デフォルトのデバイスエミュレータでアプリケーションが実行されるところが表示されます。
- 「エミュレータ」ウィンドウで「起動」の下のボタンをクリックします。エミュレータに NetBeans Web サイトの URL アドレスである http://netbeans.org が表示されます。
- 「OK」の下のボタンをクリックします。通信時間を使用してよいかどうかを尋ねる画面が表示されます。
- 「Yes」の下のボタンをクリックして続行します。エミュレータで Web サイトへの接続が試行され、待機画面が表示されます。
- エミュレータを接続したら、アプリケーションを閉じます。
待機画面カスタムコンポーネントを使用したモバイルアプリケーションの作成
WaitScreenExample プロジェクトの作成
- 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。「カテゴリ」から「Java ME」を選択します。「プロジェクト」で「モバイルアプリケーション」を選択して、「次へ」をクリックします。
- 「プロジェクト名」フィールドに「
WaitScreenExample」と入力します。「プロジェクトの場所」をシステム上の任意のディレクトリに変更します。このディレクトリを $PROJECTHOME とします。
- 「Hello MIDlet を作成」チェックボックスの選択を解除します。「次へ」をクリックします。
- 「エミュレータプラットフォーム」は、「Sun Java Wireless Toolkit 2.5.2」を選択したままにしておきます。「完了」をクリックします。
WaitScreenExample プロジェクトへのパッケージとビジュアル MIDlet の追加
- 「プロジェクト」ウィンドウで
WaitScreenExample プロジェクトを選択し、「ファイル」>「新規ファイル」(Ctrl-N) を選択します。「カテゴリ」から「Java」を選択します。「ファイルの種類」として「Java パッケージ」を選択します。「次へ」をクリックします。
- 「パッケージ名」フィールドに「
waitscreenexample」と入力します。「完了」をクリックします。
- 「プロジェクト」ウィンドウで
waitscreenexample パッケージを選択し、「ファイル」>「新規ファイル」(Ctrl-N) を選択します。「カテゴリ」にある「MIDP」を選択します。「ファイルの種類」として「ビジュアル MIDIlet」を選択します。「次へ」をクリックします。
- 「MIDlet 名」フィールドと「MIDP クラス名」フィールドに「
MyWaitScreenMidlet」と入力します。「完了」をクリックします。
MyWaitScreenMidlet へのコンポーネントの追加
「ビジュアル MIDlet」を選択してビジュアルモバイルデザイナ (VMD) を開きます。VMD ウィンドウ最上部の「フロー」ビューをクリックしてフローデザイナを開き、ここでアプリケーションフローを設計します。
- ビジュアル MIDlet を「フロー」ビューに切り替えます。次の画面コンポーネントをコンポーネントパレットからドラッグし、フローデザイナにドロップします。
- 「textBox1」を選択します。コンポーネントパレットの下の「プロパティー」ウィンドウで、「タイトル」プロパティーを「
Text Box」に変更します。
- 次のコンポーネントに対し、同じ操作を実行してタイトルを変更します。
- 次の各コンポーネントの「文字列」プロパティーを使用して、値を変更します。
-
WaitScreen1 のテキストプロパティーを「Please Wait...」に変更
「フロー」ビューは、次の画像のように表示されるはずです。
各コンポーネントの横に、オレンジ色の四角形が、1 つまたは複数あることに注目してください。これらを使用して、アプリケーションフローの順序に合わせてコンポーネントを接続することができます。waitScreen1 の右側に 2 つの四角形があることにも注目してください。
画像リソースの追加
このセクションでは、待機画面と警告画面に使用する画像を追加します。
- alert.png ファイルと sandglass.png ファイルをダウンロードして
$PROJECTHOME/src/waitscreenexample フォルダにコピーします。
- 「リソース」フォルダを右クリックし、「追加」>「画像」を選択します。
- 「image1」を選択します。「プロパティー」ウィンドウで「リソースのパス」プロパティーを選択し、省略 (...) ボタンをクリックします。このダイアログで「alert.png」を選択します。
- 「alert1」コンポーネントを選択します。
- alert1 の「プロパティー」ウィンドウで「画像」プロパティーを見つけ、一覧から「image1」を選択します。この操作によって、alert.png 画像が alert1 コンポーネントにバインドされます。
- 手順 2 から 5 を繰り返して image2 を追加し、「リソースのパス」を sandglass.png に設定し、これを waitScreen1 コンポーネントにバインドします。
了解コマンド、戻るコマンド、および終了コマンドをテキストボックスコンポーネントと待機画面コンポーネントに追加
- コンポーネントパレットの「コマンド」セクションで了解コマンドを選択します。このコマンドを textBox1 にドラッグ&ドロップします。
- コンポーネントパレットの「コマンド」セクションで戻るコマンドを選択します。このコマンドを list1 にドラッグ&ドロップします。
- コンポーネントパレットの「コマンド」セクションで終了コマンドを選択します。このコマンドを list1 にドラッグ&ドロップします。
アプリケーションフローの作成
これで、アプリケーションフローを作成する準備ができました。
- 「フロー」ビューで、モバイルデバイスの開始ポイントをクリックし、textBox1 コンポーネントまでドラッグします。
- 同様に、次の図に示すようにコンポーネントを接続します。
待機画面のバックグラウンドタスクの作成
- 「リソース」を右クリックし、「追加」>「簡易取消可能タスク」を選択します。
- 「フローデザイナ」ウィンドウの「waitScreen1」コンポーネントを選択します。
- waitScreen1 の「プロパティー」ウィンドウで「タスク」プロパティーをクリックし、ドロップダウンメニューから「simpleCancellableTask1」を選択します。これで、simpleCancellableTask1 が waitScreen1 コンポーネントのバックグラウンドタスクになりました。
- VMD ウィンドウ最上部の「ソース」ボタンをクリックします。アプリケーションのソースコードが開きます。
MyWaitScreenMIDlet ソースコードの public void destroyapp(boolean unconditional) { } のあとに、次のコードをペーストします。
private void getServerInfo() throws IOException {
String url = textBox1.getString();
list1.deleteAll();
/**
* HttpConnection を開く
*/
HttpConnection hc = (HttpConnection) Connector.open(url);
/**
* 索引でヘッダーフィールドキーとヘッダーフィールドを
* 取得し、list1 に挿入する
*/
list1.setTitle(hc.getURL());
for (int i=0;hc.getHeaderFieldKey(i)!=null; i++){
list1.insert(0,hc.getHeaderFieldKey(0)+" :"+hc.getHeaderField(0),null);
}
/**
* 終了時間 ...
*/
hc.close();
}
- SimpleCancellableTask1 の「プロパティー」ウィンドウで「実行」プロパティーを選択します。
- 「コードを挿入」ウィンドウに「
getServerInfo();」と入力します。
プロジェクトの実行
-
F6 キーを押して主プロジェクトを実行します。
「実行」>「主プロジェクトを実行」を選択する方法もあります。
待機画面コンポーネントと簡易取消可能タスクリソースの詳細
NetBeans IDE には、VMD で使用できるコンポーネントと同様に、待機画面コンポーネントや簡易取消可能タスクリソースのコンポーネントに関する API ドキュメント (javadocs) が用意されています。javadocs を読むには、次の手順に従います。
- 「ヘルプ」>「Javadoc 参照」>「NetBeans MIDP コンポーネント」を選択します。このアクションによって、ファイルがブラウザに表示されます。
-
待機画面コンポーネントの詳細を参照するには、「org.netbeans.microedition.lcdui」リンクをクリックします。次に、「Class Summary」表の「WaitScreen」リンクをクリックします。
-
簡易取消可能タスクの詳細を参照するには、「org.netbeans.microedition.util」リンクをクリックします。次に、「Class Summary」表の「SimpleCancellableTask」リンクをクリックします。
その他の NetBeans Java ME カスタムコンポーネントチュートリアル