[ ホーム | 本の感想 | 好きな作家 | イラスト展示 | Perlは便利 | Javaプログラミング ]

3. スレッドを組み込む

startメソッドで新しいThreadインスタンスを作り、スレッドを実行します。Threadインスタンスを作るのは、
	Thread test = new Thread(this);
ですが、変数testはメソッドの外で定義して、他のメソッドからもアクセスできるインスタンス変数にするので次の様になります。メソッドの外側で宣言した変数をインスタンス変数、メソッドの内側で定義した変数をローカル変数といいます。
	Thread test = null;

	test = new Thread(this);
括弧の中のthisはこのアプレット自身を表しています。runメソッドを動かすには
	test.start();
とします。このstartメソッドはjava.lang.Threadクラスのstartメソッドです。機能を調べると、「このスレッドの実行を開始します。スレッドがすでに起動していた場合に例外が発生します。」とあります。testがnullの時のみThreadインスタンスを作成するようにすると、startメソッドは次の様になります。
	Thread test = null;

	public void start() {
		if (test == null) {
			// スレッドを実行
			test = new Thread(this);
			test.start();
		}
	}
同様にstopメソッドは次の様になります。
	public void stop() {
		if (test != null) {
			// スレッドを止める
			test.stop();
			test = null;
		}
	}
これで、スレッドのスタートとストップが出来ました。ブラウザからstartメソッドが呼ばれてスレッドが動き出します。このスレッドで実行される処理はrunメソッドに書くのでした。

runメソッドでスレッドに関係する処理を、詳しく見ていきます。while(true)でループを作っています。「新しい色を作る」はスレッドに直接関係しないので後で考えます。repaintメソッドが呼ばれます。repaintがupdateメソッドを呼び、updateがpaintメソッドを呼びます。1回色を変えた後に一定時間処理を停止させます。一定時間の処理の停止はjava.lang.Threadのsleepメソッドを使います。他のスレッドの割り込みがあった場合の例外処理を入れます。try{…} catch { }のcatchの後の括弧中がそうです。何もやっていません。
	public void run() {
		while(true) {
			新しい色を作る;
			repaint();
			// repaintはupdateを呼び、updateはpaintを呼ぶ

			try {
				// スレッドの一時停止時間
				Thread.sleep(200);
			} catch (InterruptedException e){ }
		}
	}
スレッドに関してはここまでで完成です。後は新しい色を作る処理を考えます。


[ ホーム | 本の感想 | 好きな作家 | イラスト展示 | Perlは便利 | Javaプログラミング ]
間違いなどお気付きの事がありましたら hirose97@cg.netlaputa.ne.jp までメールを下さい。
ご感想もお待ちしています。なお、リンクは自由ですが出来ればお知らせ下さい。