アニメーション
スレッド
今回は、アニメーションについて解説していきます。
今まではマウスのクリックなどで、repaintメソッドを呼び出し画面描画を更新していました。 この仕組みでは、何らかのアクションを起こさなければ再描画されないためアニメーションを実装することはできません。 そこでスレッドというものを使ってアニメーションを実装します。
まずは、次のようにRunnableインターフェイスを使うことを記述します。
public class sample extends Applet implements Runnable{
このRunnableインターフェイスを使うときにはrunメソッドを作っておかなければなりません。 runメソッドはThreadによって呼び出されるため、実際の処理はこの中に書きます。
public void run(){}
スレッドを作る
それでは、実際にスレッドの生成を行っていきます。 まずは、Thread型の変数を作りスレッドを生成します。
Thread th = new Thread(this);
runメソッドを呼び出すためには次のようにstartメソッドを呼び出します。
th.start();
サンプル
スレッドを使ったプログラムの例としてカウントした文字を表示するアプレットを用意しました。
このアプレットは1000万までの数をカウントするアプレットです。 下がプログラムのソースです。(見やすくするために関係の無い箇所は省いています)
01 public class sample extends Applet implements Runnable{
02 Thread th = null; /*Thread型の変数thを作る(中身は空)*/
03 int cnt = 0; /*カウントした数値を格納するための変数*/
04
05 public void init(){
06 th = new Thread(this); /*新しいスレッドを生成*/
07 th.start(); /*スレッドthをスタートする(runメソッドを呼び出し)*/
08 }
09 public void run(){
10 while(cnt < 10000000){
11 repaint();
12 cnt++;
13 }
14 }
15 public void stop(){
16 th = null;
17 }
2行目で変数thにnullを代入しています。 このnullというのは「空っぽ」という意味でここでは変数thを空にしています。
7行目でスレッドをスタートさせ、runメソッドが動き始めます。 runメソッドの中では変数cntの値を増加させていき結果をrepaintメソッドを呼び出すことで描画しています。
15〜17行目のstopメソッドではアニメーションを停止させます。プログラムの中では、このメソッドを呼び出されていません。 stopメソッドは別のWebページに移動した場合などに呼び出されます。 stopメソッドを書いておかないとページを移動した場合にもアニメーションが動き続けてしまいます。
Copylight (c) ガメラボ 2006 - All Rights Reserved