/* ダブルバッファリングのサンプル Time-stamp: "2005/10/27 Thu 21:57 hig" Saburo Higuchi 2003 http://www.math.ryukoku.ac.jp/~hig/ プログラム解説等 http://sparrow.math.ryukoku.ac.jp/~hig/course/juniors_2004/05/ */ //#define 1 //#define MIDP import com.nttdocomo.ui.*; import java.util.Random; /** マルチスレッドのサンプル */ public class DoubleBufferSample extends IApplication { /** 起動するときに呼ばれる メソッド. 必須. */ public void start(){ DoubleBufferCanvas cc=new DoubleBufferCanvas(this); Display.setCurrent(cc); } } /** キャンバスを継承するクラス */ class DoubleBufferCanvas extends Canvas implements Runnable { DoubleBufferSample parent; private int width; private int height; final private int size=20; // 正方形の一辺 private int nx; // 横方向の正方形の数 private int ny; // 縦方向の正方形の数 /** コンストラクタ. 最初に1回だけ実行される */ DoubleBufferCanvas(DoubleBufferSample m){ this.parent=m; width=getWidth(); height=getHeight(); nx=width/size; ny=height/size; /* このクラスの run に制御を移す */ Thread th=new Thread(this); th.start(); } public void run(){ while(true){ // 無限ループ // 決り文句. ループの回る速さを決める try { Thread.sleep(20); } catch ( Exception e ) { // 割り込みがあっても何もしない. } repaint(); } } public void paint(Graphics g){ // g.lock(); // ダブルバッファリング g.setColor(Graphics.getColorOfName(Graphics.WHITE)); g.fillRect(0,0,width,height); // 画面を消す g.setColor(Graphics.getColorOfName(Graphics.BLUE)); for(int y=0; y