Thread を使うアプレットの基本パターン

簡単な実例で、Threadを利用したアプレットの作り方を解説します。
次の例は「デジタル時計」の機能を実現したアプレットです。 ポイントとなるのは、start(), stop(), run() の各メソッドです。
このアプレットの場合、画面に出た時点で処理を開始したいので、 スレッドの処理は start()メソッドで開始されます。 run() がスレッドによって処理される内容です。 ここでは、一定時間ごとに再表示を呼び出す無限ループです。 アプレットが画面から消えたら、スレッドの処理が終了するように stop() メソッドの中に後始末の処理を記述します。

以上のようなパターンは、多くのアプレットでも共通して利用される 基本のパターンです。


import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.util.Date;

/** 時計のアプレット Clock クラスの定義 */

public class Clock extends Applet implements Runnable {

    /** 時刻の更新を行うスレッド */

       public Thread clockThread=null;

    /** 初期設定のメソッド
     指定された色のイメージを生成し、アプレットのサイズを設定 */

       public void init() {

             resize( 208, 36 );
       }

    /** アプレットの表示(初期状態)を行うメソッド */

       public void paint( Graphics g ) {

             g.setColor( Color.black );
             g.fillRect( 0, 0, size().width, size().height );
       }

    /** アプレットの表示の変更を行うメソッド */

       public void update( Graphics g ) {

             paint( g );

             Date date = new Date();       //現在の時刻

             g.setColor( Color.yellow );
             g.drawString( date.toString(), 4, 24 );
       }

    /** アプレットが画面に現れた時に呼び出される */

       public void start() {

             if( clockThread == null ) {
                   clockThread = new Thread(this); //スレッド生成
                   clockThread.start();            //スレッド起動
             }
       }

    /** アプレットが画面から消えた時に呼び出される */

       public void stop() {

             if( clockThread != null ) {
                   clockThread.stop();           //スレッド停止
                   clockThread = null;           //スレッド消去
             }
       }

    /** アプレットが続行する作業 */

       public void run() {

             while( clockThread.isAlive() ) {
                  repaint();
                  try {
                       Thread.sleep(200);       //一時停止
                  }
                  catch (InterruptedException e){ /* 形式上必要 */ }
             }
       }
}