一个定时器,在程序运行时就开始计时,程序界面上有个按钮,如果显示为“停止”,按下就停止计时,反之按下后开始计时。
...
Timer timer = new Timer();
MyTask tasks=new MyTask();class MyTask extends java.util.TimerTask{......}
...
...
初始化函数中:{timer.schedule(tasks, 0, 1000);}
...
...
public void jButton1_actionPerformed(ActionEvent e) {
    
if (jButton1.getText()=="开始")
    {
      XXXXXXXXXXXX
      jButton1.setText("停止");
    }
else
    {
      tasks.cancel();
      jButton1.setText("开始");
    }
  }现在我不知道按下“开始”的代码应该怎样写。因为按下“停止”后,初始化时建立的MyTask对象就没了,按下“开始”,又要新建一个MyTask对象,但是这个对象不能在else中被调用啊。

解决方案 »

  1.   

    这个技术我刚用过,很简单的,你把Timer搞成全局的static变量就可以了.
    /** Timer */
    private static Timer timer = new Timer();开始:timer.schedule(tasks, 0, 1000);停止:timer.cancel();
      

  2.   

    我照你说的改了,但是先执行“停止”,再执行“开始”,结果提示:Timer already cancelled.
    因为执行timer.cancel()时,Timer就结束了,再在“开始”里面调用timer,对象已经没有了?上面这些是用的java.util.Timer包,后来我用javax.swing.Timer包里面的 timer.start(),timer.stop()解决了全部问题。不知道你用你的方法是如何实现反复调用“开始”、“停止”的?
      

  3.   

    我写的是后台程序,还没考虑到swing下的timer.
      

  4.   

    timer本身就是一个线程呀,应该能实现