import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class Pulsing2 extends Applet implements Runnable,ActionListener{ Button running = new Button("stop"); int cx, cy, r=10, dr=2; public void init(){ add(running); running.addActionListener(this); cx = getSize().width/2; cy = getSize().height/2; } Thread th = null; public void start(){ if(th==null){th = new Thread(this); th.start();} } public void stop(){ if(th!=null){th.stop(); th = null; } } public void run(){ while(true){ // 無限ループ if(r > cy || r < 10) dr = -dr; r = r+dr; repaint(); try{ th.sleep(100); } // 100ミリ秒の時間待ち catch(InterruptedException e){ } } } public void actionPerformed(ActionEvent e){ if((running.getLabel()).equals("stop")){ th.suspend(); // 一時停止 running.setLabel("run"); }else{ th.resume(); // 実行再開 running.setLabel("stop"); } } public void paint(Graphics g){ g.drawOval(cx-r, cy-r, 2*r, 2*r); } }
ボタン"running"の表面に文字列"run"か"stop"かを表示しておき,その文字列をrunning.getLabel()で取得して動作を選択しています.getLabelの反対はsetLabelです.
"suspend"と"resume"は,スレッドを一時停止したり再開したりします.この制御を受けるのはスレッドthです.
26.1.9.25 スレッド | 26.1.9.26 スレッドとボタン | 26.2 プログラミングの概念 | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Thu, 02 Sep 2004 19:10:34 JST (1793d) |