用了一个事件触发了timer.cancel()函数,当我想重新调用timer的时候就报错说timer已经cancel,有什么方法重新调用timer么???

解决方案 »

  1.   

    以前遇到过这种情况,只不过不是android下的。我的解决办法是对timertask进行操作,首先保持一个timertask的一个备份。操作时cancel timertask,然后重新调用的时候再schedule一次他的备份。
    代码示例:import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;public class Timer_cancel { /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    Timer timer = new Timer();
    MyTask task = new MyTask();
    timer.schedule(task.getCopy(), 0, 2000);
    Thread.sleep(5000);
    task.cancel();
    timer.schedule(task.getCopy(), 0, 1000);
    } static class MyTask extends TimerTask implements Cloneable { private MyTask myTask; @Override
    public void run() {
    // TODO Auto-generated method stub
    System.out.println(Thread.currentThread().getName() + "\t" + new Date());
    }

    public MyTask getCopy() {
    if(myTask == null)
    myTask = new MyTask();
    try {
    return (MyTask)myTask.clone();
    } catch (CloneNotSupportedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return null;
    }
    }
    }
    }
      

  2.   


    写错了一个地方,更正一下。public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    Timer timer = new Timer();
    MyTask task = new MyTask();
    MyTask task1 = new MyTask();
    timer.schedule(task1, 0, 2000);
    Thread.sleep(5000);
    task1.cancel();
    timer.schedule(task.getCopy(), 5000, 1000);
    }
      

  3.   

    重新new一个不可以吗???