当前位置: 代码迷 >> J2SE >> JAVA关于线程的有关问题.JAVA计时器
  详细解决方案

JAVA关于线程的有关问题.JAVA计时器

热度:87   发布时间:2016-04-24 02:08:46.0
JAVA关于线程的问题..JAVA计时器
一个简单的计时器:
Java code
public class Testtime extends JFrame implements ActionListener,Runnable{    JButton btn1;    JButton btn2;    JLabel time;    int minute,seconds;    Thread begin;    boolean flag;    public Testtime(){        btn1=new JButton("开始计时   ");        btn2=new JButton("   停止计时");        time=new JLabel(0+":"+0);        minute=0;seconds=0;        add(btn1);        add(time);        add(btn2);        setLayout(new FlowLayout());        setSize(400,400);        setVisible(true);        btn1.addActionListener(this);        btn2.addActionListener(this);    }    public void actionPerformed(ActionEvent e) {        if(e.getSource()==btn1){            begin=new Thread(Testtime.this);            minute=0;seconds=0;            flag=true;            begin.start();        }        else{            flag=false;                    }            }    public void run(){        while(flag){            seconds++;            if(seconds%60==0){                seconds=0;                minute++;            }            time.setText(minute+" : "+seconds);            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }        }        }    public static void main(String args[]){        new Testtime();    }}

点击按钮“开始计时”,“停止计时”均能正常工作。

但是如果我连续点击了两次“开始计时”,秒钟速度会快一倍。


请问该怎么修改代码呢?

------解决方案--------------------
事件处理里面,需要判断当前线程是否还是alive的,如果是则将其停止。
如下修改代码:

public void actionPerformed(ActionEvent e) {
if(e.getSource()==btn1){
if (begin != null && begin.isAlive()) { //检查线程的状态。。。
begin.stop();
}
begin = new Thread(Testtime.this);

minute=0;seconds=0;
flag=true;
begin.start();
}
else{
flag=false;
}
}
  相关解决方案