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 }