/* ダブルバッファリングのサンプル 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 DOJA //#define 1 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.util.Random; /** マルチスレッドのサンプル */ public class DoubleBufferSample extends MIDlet { /** 起動するときに呼ばれる メソッド. 必須. */ public void startApp(){ DoubleBufferCanvas cc = new DoubleBufferCanvas(this); Display.getDisplay(this).setCurrent(cc); } public void pauseApp(){} public void destroyApp(boolean unconditional){} } /** キャンバスを継承するクラス */ 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){ boolean doDoubleBufferingByHand=false; if( !doDoubleBufferingByHand ){ g.setColor(255,255,255); g.fillRect(0,0,width,height); // 画面を消す g.setColor(0,0,255); for(int y=0; y