これまでJavaを勉強してきましたが、勉強してきたのはパソコン用のJavaです。 実は、Javaは3種類あります。
携帯アプリ ( mobile application )とは、携帯電話で利用できるアプリケーション・ソフトウェアです。 例えば、ゲームの携帯アプリを開発すれば、携帯電話でゲームが楽しめます。
日本の場合、携帯アプリの仕組みは、NTT DoCoMo, au(KDDI), SoftBankの3キャリアの間で大きく異なります。 しかし、3キャリアともJavaが関係しています。
NTT DoCoMoの携帯アプリは、 iアプリ ( iappli )と呼ばれます。 iアプリを開発するときは、Java MEの一種である DoJa という規格に基づきます。 iアプリを配布するとき、キャリアによる審査は必要ありません。
au(KDDI)の携帯アプリには、 EZアプリ(BREW) ( EZappli(BREW) )と オープンアプリ ( OpenAppli )の2種類があります。 EZアプリ(BREW)を開発するときは、C/C++の一種である BREW (Binary Runtime Environment for Wireless)という規格に基づきます。 オープンアプリを開発するときは、Java MEの一種である MIDP (Mobile Information Device Profile)という規格に基づきます。 EZアプリ(BREW)を配布するとき、キャリアによる審査が必要です。 オープンアプリを配布するとき、キャリアによる審査は必要ありません。
SoftBankの携帯アプリは、 S!アプリ ( S! Appli )と呼ばれます。 S!アプリを開発するときは、Java MEの一種であるMIDPという規格に基づきます。 S!アプリを配布するとき、キャリアによる審査が必要です。
キャリア | サービス名 | 言語 | 規格 | 配布 |
---|---|---|---|---|
NTT DoCoMo | iアプリ | Java | DoJa | 自由 |
au(KDDI) | EZアプリ(BREW) | C/C++ | BREW | 審査が必要 |
オープンアプリ | Java | MIDP | 自由 | |
SoftBank | S!アプリ | Java | MIDP | 審査が必要 |
結論として、個人で携帯アプリを開発・配布するには、NTT DoCoMoのiアプリかau(KDDI)のオープンアプリということになります。 この授業では、NTT DoCoMoのiアプリについて説明します。
iアプリを開発する前に、Windowsパソコンを用意する必要があります。 パソコンには、Javaの開発環境とDoJaの開発環境をインストールしておきます。
iアプリを開発するには、まず、DoJaの開発環境を起動します。 そして、Javaプログラムを入力し、コンパイルします。 DoJaの開発環境には、iモード携帯のエミュレータがあり、iアプリがiモード携帯でどう動くのかが確認できます。
動作確認ができたら、iアプリを配布します。 iアプリのファイル一式を、ウェブ・サイトにアップロードします。 iモード携帯でこのウェブ・サイトにアクセスし、iアプリをダウンロードします。 すると、iアプリが実行できます。
DoJaには、DoJa 1.x, DoJa 2.x, DoJa 3.x, DoJa 4.x, DoJa 5.xがあります。 数字が大きいほど、新機種に対応しています。 ここでは、中間のDoJa 3.0を利用することにします。 DoJa 3.0と組み合わせて使うJavaは、Java 1.3.1です。
Javaの開発環境(Java 2 SDK, Standard Edition Version 1.3.1)を、次のようにインストールします。
インストールが完了したら、次のようにパスを設定します。
ここで、試しにJavaアプレットを作成してみます。 Windowsでは、プログラムの入力には「メモ帳」などを使います。 プログラムのコンパイルや実行には「コマンドプロンプト」などを使います。
import java.applet.*; import java.awt.*; public class JBox extends Applet { public void paint (Graphics g) { g.fillRect(50, 50, 100, 100); } }
<applet code="JBox.class" width="300" height="200"> </applet>
アプレットビューア: JBox.class |
アプレット |
アプレットが開始されました。 |
次に、DoJaの開発環境(iappli Development Kit for DoJa-3.0)を、次のようにインストールします。
DoJaの開発環境を起動するには、「スタート」→「プログラム」→「iappli Development Kit for DoJa-3.0」→「iappliTool for DoJa-3.0」とクリックします。 起動すると、メイン画面とエミュレータ端末画面が表示されます。
新しくiアプリを作成するには、まず、プロジェクトというものを作成します。 プロジェクト ( project )とは、1つのiアプリを作成するためのファイルの集合です。 では、メイン画面の「プロジェクト新規作成」ボタンをクリックしてください。 すると、プロジェクトの格納先と名前を聞かれるので、「参照」ボタンをクリックして格納するフォルダ(例えばC:\Documents and Settings\ユーザ名\デスクトップ)を選択します。 「プロジェクト名」にはiアプリの名前(今回はIBox)を入力し、「作成」ボタンをクリックします。 すると、指定したフォルダにプロジェクトが作成されます。
プロジェクトにJavaプログラムを追加するには、メイン画面で「プロジェクト」→「ソースファイルの新規作成」とクリックします。 すると、ファイル名を聞かれるので、ファイル名(今回はIBox.java)を入力し、「作成」ボタンをクリックします。 自動的にテキスト・エディタ(メモ帳)が開き、テンプレートが挿入されます。 これを変更してプログラムを完成させ、ファイルに保存します。 もう1つのJavaプログラムIBoxCanvas.javaについても、同様に追加します。
import com.nttdocomo.ui.*; public class IBox extends IApplication { public void start () { Display.setCurrent(new IBoxCanvas()); } }
import com.nttdocomo.ui.*; public class IBoxCanvas extends Canvas { public void paint (Graphics g) { g.fillRect(50, 50, 100, 100); } }
このプログラムの説明は省略しますが、これがJavaアプレットに似ていることに注目してください。
プログラムをコンパイルするには、メイン画面の「ビルド」ボタンをクリックします。 ここで、 ビルド ( build )とは、プログラムをコンパイルして1つのiアプリにまとめることです。 もし、プログラムにエラーがあれば、エラー・メッセージが表示されます。 エラーがなければ、「ビルド終了」と表示されます。
ビルドしたiアプリを実行するには、メイン画面の「起動」ボタンをクリックします。 プログラムにエラーがなければ、エミュレータ端末画面にiアプリが表示されます。 プログラムを終了するには、エミュレータ端末画面の終話ボタンをクリックします。
作成したiアプリをiモード携帯で実行するには、iアプリをウェブ・サーバにアップロードします。 アップロードするファイルは次の3個です。
JAR (Java ARchiver)ファイルは、〜.classファイルなどをアーカイブしたファイルです。 プロジェクトのフォルダのbinフォルダに入っています。 ADF (Application Descriptor File)は、iアプリの名前やJARファイルのURLなどを設定するファイルです。 これも、binフォルダに入っています。 ADFを変更するには、メイン画面の「ADF設定」をクリックします。 HTMLファイルは、ホームページ作成言語ですが、ここにADFのURLなどを指定します。
<OBJECT declare id="application.declaration" data="IBox.jam" type="application/x-jam"> </OBJECT> <A ijam="#application.declaration" href="no_appli.html">ダウンロード</A>
最後に、iモード携帯で、このHTMLファイルのURLにアクセスします。 すると、iアプリがダウンロードされ、iアプリが実行できます。
今後の予定は以下の通りです。
この授業の成績は、レポートの提出と試験の得点で決まります。
成績に関して次のような事情のある人はメールで連絡してください。 できる限り対処します。
問1. 次のプログラムは、入力された3つの整数の合計を出力する(つもりの)ものです。 このプログラムの不具合を修正してください。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class FigureSum { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int x, y, z, sum; /* 8*/ System.out.print("整数を入力してください: "); /* 9*/ x = Integer.parseInt(br.readLine()); /* 10*/ System.out.print("整数を入力してください: "); /* 11*/ y = Integer.parseInt(br.readLine()); /* 12*/ System.out.print("整数を入力してください: "); /* 13*/ z = Integer.parseInt(br.readLine()); /* 14*/ sum = x * y * z; /* 15*/ System.out.println(sum); /* 16*/ } /* 17*/ }
asiaa1:~/comp2b b08a001$ java FigureSum 整数を入力してください: 1 整数を入力してください: 2 整数を入力してください: 3 6 // 正しい asiaa1:~/comp2b b08a001$ java FigureSum 整数を入力してください: 10 整数を入力してください: 20 整数を入力してください: 30 6000 // 間違い asiaa1:~/comp2b b08a001$
問2. 次のプログラムは、入力された3つの整数がすべて異なるかどうかを出力する(つもりの)ものです。 このプログラムの不具合を修正してください。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class AllDifferent { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int x, y, z; /* 8*/ System.out.print("整数を入力してください: "); /* 9*/ x = Integer.parseInt(br.readLine()); /* 10*/ System.out.print("整数を入力してください: "); /* 11*/ y = Integer.parseInt(br.readLine()); /* 12*/ System.out.print("整数を入力してください: "); /* 13*/ z = Integer.parseInt(br.readLine()); /* 14*/ if (x != y || y != z || x != z) { /* 15*/ System.out.println("すべて異なる。"); /* 16*/ } /* 17*/ } /* 18*/ }
asiaa1:~/comp2b b08a001$ java AllDifferent 整数を入力してください: 10 整数を入力してください: 20 整数を入力してください: 30 すべて異なる。 // 正しい asiaa1:~/comp2b b08a001$ java AllDifferent 整数を入力してください: 10 整数を入力してください: 10 整数を入力してください: 30 すべて異なる。 // 間違い asiaa1:~/comp2b b08a001$
問3. 次のプログラムは、入力された3つの整数の最大値を出力する(つもりの)ものです。 考え方は、 x と y を比較し、大きい方と z を比較する、です。 このプログラムの不具合を修正してください。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class FindMax { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int x, y, z, max; /* 8*/ System.out.print("整数を入力してください: "); /* 9*/ x = Integer.parseInt(br.readLine()); /* 10*/ System.out.print("整数を入力してください: "); /* 11*/ y = Integer.parseInt(br.readLine()); /* 12*/ System.out.print("整数を入力してください: "); /* 13*/ z = Integer.parseInt(br.readLine()); /* 14*/ if (x < y) { /* 15*/ max = y; /* 16*/ } else { /* 17*/ max = x; /* 18*/ } /* 19*/ if (z > max) { /* 20*/ max = z; /* 21*/ } else { /* 22*/ max = z; /* 23*/ } /* 24*/ System.out.println(max); /* 25*/ } /* 26*/ }
asiaa1:~/comp2b b08a001$ java FindMax 整数を入力してください: 10 整数を入力してください: 20 整数を入力してください: 30 30 // 正しい asiaa1:~/comp2b b08a001$ java FindMax 整数を入力してください: 30 整数を入力してください: 20 整数を入力してください: 10 10 // 間違い asiaa1:~/comp2b b08a001$
問4. 次のプログラムは、入力された1以上の整数の、最も左の数字を出力する(つもりの)ものです。 最も左の数字を求めるには、1桁になるまで、整数を次々と10で割ります。 このプログラムの不具合を修正してください。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class LeftDigit { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int x; /* 8*/ System.out.print("整数を入力してください: "); /* 9*/ x = Integer.parseInt(br.readLine()); /* 10*/ while (x > 1) { /* 11*/ x = x / 10; /* 12*/ } /* 13*/ System.out.println(x); /* 14*/ } /* 15*/ }
asiaa1:~/comp2b b08a001$ java LeftDigit 整数を入力してください: 12345 1 // 正しい asiaa1:~/comp2b b08a001$ java LeftDigit 整数を入力してください: 54321 0 // 間違い asiaa1:~/comp2b b08a001$
問5. 次のプログラムは、{30, 50, 10, 40, 20} で表される配列のすべての要素を逆順に出力する(つもりの)ものです。 このプログラムの不具合を修正してください。
/* 1*/ class PrintReverse { /* 2*/ public static void main (String[] args) { /* 3*/ int i; /* 4*/ int[] a = {30, 50, 10, 40, 20}; /* 5*/ for (i = 0; i > a.length; i--) { /* 6*/ System.out.println(a[i]); /* 7*/ } /* 8*/ } /* 9*/ }
asiaa1:~/comp2b b08a001$ java PrintReverse asiaa1:~/comp2b b08a001$ // 何も出力されないので間違い
今日の演習12の答案(Javaプログラム)をメールで提出してください。 差出人は学内のメール・アドレス(b08a001@cis.twcu.ac.jpなど)とし、宛先はkonishi@cis.twcu.ac.jpとします。 メールの本文には、学生番号、氏名、科目名、授業日(7月10日)を明記してください。