10. 1 Java プログラムの動かし方 10. 2 アプレットを動かす 10. 3 アプレットを書く 10. 4 アプレットの引数 10. 5 練習問題 10. 6 アプリケーションを動かす 10. 7 練習問題 10. 8 アプリケーションを書く 10. 9 アプリケーションの引数 10.10 標準出力 10.11 練習問題 10.12 宿題 10.13 おまけ
Java ではプログラムの動かし方は次の2種類に分けられます。
今まで練習で作ってきたのはアプレットの方です。アプレットは html 文書の中から呼び出され、ウェブブラウザにダウンロードされて実行されます。
それに対してアプリケーションは、自分のコンピュータにあるファイルに記憶されていて、java コマンドによって実行されます。
アプリケーションは Java の全機能を使うことができますが、アプレットはファイルの読み書きやネットワーク経由の通信が制限されています。それはなぜかというと、通常の設定ではウェブブラウザはアプレットを自動的に実行するので、どこの馬の骨とも分からないアプレットをついうっかり実行してしまうことがあります。そのアプレットが悪いことができないように、機能が制限してあるのです。
ウェブブラウザによって対応している Java のバージョンに違いがあります。1.2.2 に対応しているブラウザはまだ少ないので、自分で作ったアプレットを公開するときには注意が必要です。詳しくはこちらを見てください。 |
ウェブブラウザでアプレットを動かす手順は次のようになります。
ただしデバッグの時は、いちいち重いブラウザを立ち上げるのは大変なので、指定した html ファイルの中のアプレットだけを表示するappletviewer コマンドを使います。
アプレット用のプログラムを書くときは、次の約束を守ってください。
アプレットはウェブブラウザの中で動くものなので、自分勝手に動くわけにはいきません。ブラウザは必要に応じてアプレットのメソッドを呼び出し、メソッドの実行が終了したら、ブラウザに戻ります。ブラウザから呼び出されるメソッドには次のようなものがあります。
10.3 アプレットを書く
import java.applet.Applet;
と書く。これは、他の場所で宣言されている Applet クラスを使うための準備です。
extends Applet
を付ける。これは、Applet クラスを基にして新しいクラスを作るという指定です。これにより Applet クラスの機能を使えるようになります。
アプレットのメソッド
init
--- アプレットがブラウザに読み込まれたときに呼 び出される。 start
--- ブラウザがアプレットを含むページを表示する ときに呼び出される。 stop
--- ブラウザが別のページを表示するときに呼び出 される。アニメーションなどを行なうときは、ここで実行を停めるように設 定しておかないと、CPU やメモリを浪費し続ける。 destroy
--- ブラウザが終了するときに呼び出される。 paint
--- 図形の再描画が必要になったときに呼び出さ れる。
再描画は、ウィンドウが他のウィンドウに隠されていたのが表に出てきたときなどに必要となりますので、paint はいつ呼び出されるか分かりません。原則として、何回呼び出されても同じ図形を描くようにします。ですから、MovingBall.java のように描画するたびにインスタンス変数の値を変更するのは、実は良くないプログラムです。本当はスレッドを使って更新するのが良いのですが、スレッドはこの授業の範囲外なのでこのようにしてあります。 |
html 文書の中に applet 要素があると、ブラウザは指定されたアプレットのインスタンスを作り、ウィンドウの中に表示します。複数回 applet 要素があると、複数個のインスタンスを作ってそれぞれ表示しますが、それぞれに引数(パラメータ)を与えて、少し違う動作をさせることができます。
applet 要素にパラメータを書くやり方は情報処理 Ia でやりました。このデータをアプレットが受け取るには、getParameter メソッドを使います。getParameter メソッドは name 属性の文字列を引数とし、対応する value 属性で指定された文字列を返り値とします。例えば、情報処理 Ia のテキストの場合、param 要素に
<param name="title" value="Keio SFC">と指定してあります。アプレットのプログラムの中では、
String s = getParameter("title");とすると、String 型の変数 s に、"Keio SFC"という値が代入されます。
getParameter メソッドの返り値は String 型ですから、数値をパラメータとする場合は、Integer.parseInt またはDouble.parseDouble で文字列から数値に変換する必要があります。
実行例
アプレットは他のマシンからダウンロードして実行するため、セキュリティ対策上、ファイルアクセスができないなどの制限があります。それに対してアプリケーションは、そのような制限がありません。
10.5 練習問題
MovingBall.java を変更して、パラメータによりボールの個数を指定するようにしましょう。
myBall = new Ball[n];
この new は n 個分の配列を作るためのもので、Ball クラスのインスタンスを作るものではありませんから、注意しましょう。
for (int i = 0; i < myBall.length; i = i + 1) {
....
}
とします。
10.6 アプリケーションを動かす
自動的にはダウンロードしませんが、もちろん、自分でどこかのウェブサイトからダウンロードすることはできます。怪しげなプログラムをダウンロードして実行しないようにしましょう。これは、Java に限らずどんな言語で書いてあるプログラムでも同じです。 |
アプリケーションを実行する手順は次のようになります。
% java クラス名 引数引数の使い方はこの後で説明します。
Hello World! と端末ウィンドウに出力するアプリケーションを作ってみましょう。
1 2 3 4 5 |
public class HelloWorld2 { public static void main(String arg[]) { System.out.println("Hello, world!"); } } |
% javac HelloWorld2.java
% java HelloWorld2
アプリケーションプログラムを書くときは、次の約束を守ってください。
public static void main(String arg[])を宣言する。
アプレットと違い、アプリケーションを動かす java コマンドは、最初に main メソッドを呼び出すだけです。インスタンスやウィンドウも自動的には用意してくれませんので、自分で全部書く必要があります。
アプレットと同様に、アプリケーションも起動する時に引数(コマンドライン・アーギュメント)を指定して、動作を変えることができます。
java コマンドは、実行するクラス名を指定しますが、その後に好きな文字列を書くことができます。これは、空白で区切って、String型の配列としてプログラムに渡されます
例えば、
引数は必ず String 型なので、数値を指定したい場合は Integer.parseInt またはDouble.parseDouble で文字列から数値に変換する必要があります。
java コマンドはウィンドウを用意してくれないので、結果を画面に表示したい場合は
標準出力を管理するインスタンスは System.out という変数に入っています。このインスタンスに対して、次のメソッドを呼び出すと、データを標準出力に出すことができます。
例えば、Hello, World! という文字列を改行付きで標準出力に出したい場合は、
なお、標準入力については次回にやります。
次のように、引数で指定された段数のピラミッド形を sfc という文字で出力するアプリケーション SfcPyramid.java を書きなさい。
アプリケーションでウィンドウを作るには、Frame クラスを使います。
慶應義塾大学の授業以外での無断利用、複製はご遠慮下さい。10.9 アプリケーションの引数
% java HelloWorld2 foo bar
を実行すると、java コマンドは HelloWorld2 というクラスのmain メソッドを呼び出しますが、その時の仮引数 arg には次のような値が入ります。
arg[0] = "foo";
arg[1] = "bar";
10.10 標準出力
のどちらかになります。標準出力については情報処理 Ia でやりました。
System.out.println("Hello, World!");
とします。
10.11 練習問題
sfc
sfc
sfc
sfc
sfc
sfc sfc sfc sfc sfc
10.12 宿題
% java SfcPyramid 4
sfc
sfc sfc
sfc sfc sfc
sfc sfc sfc sfc
%
10.13 おまけ
Frame クラスを使って、以前に作ったForeignExchange.java をアプリケーションに書き直してみましょう。
インスタンス.setVisible(true);
[目次]
[前回]
[次回]
[重要語索引]
Copyright (c) 2000 慶應義塾大学