pauseメソッドが呼び出されたときの処理:
Boolean flag = false; private void pause() { flag = true; try { do { myThread.sleep(300); } while (flag); } catch (Exception e) {} } [図] pauseメソッドのコード
表示をソース・ウィンドウに切り替え,以下の手順によりプログラムの不足部分を補う.
11 public class AnimDemo extends javax.swing.JFrame implements Runnable { 12
20 Thread thread; 21 int counter = 0; 22 Boolean flag, stepFlag; 23 24 void pause() { 25 flag = true; 26 try { 27 do { 28 thread.sleep(300); 29 } while (flag && stepFlag); 30 } catch (Exception e) { 31 } 32 return; 33 }
34 35 void doCountUp() { 36 jLabel1.setText(Integer.toString(counter)); 37 counter++; 38 pause(); 39 }このメソッドではカウンタの値を表示し, カウンタを1つ進めた後にpauseメソッドを呼び出して処理を中断している
40 41 public void run() { 42 while (true) { 43 while (counter <= 100) { 44 doCountUp(); 45 } 46 counter = 0; 47 stepFlag = true; 48 jButton1.setText("Restart"); 49 } 50 }43〜45行がカウントアップ処理のループである. 100までのカウントアップが終了すると46〜48行で,カウンタ値を0に戻して, カウントアップ再開の準備をしている
114 private void jButton1ActionPerformed(java.awt,event.ActionEvent evt) { 115 if(thread == null) { 116 thread = new Thread(this); 117 flag = false; 118 stepFlag = false; 119 thread.start(); 120 } 121 else { 122 stepFlag = !stepFlag; 123 } 124 if(stepFlag) { 125 jButton1.setText("Cont."); 126 jButton2.setText("Next"); 127 } 128 else { 129 jButton1.setText("Step"); 130 jButton2.setText("----"); 131 } 132 } 133 134 private void jButton2ActonPerformed(java.awt.event.Actionevent evt) { 135 flag = false; 136 }