我想在每多少时间之后执行同一个程序,就用了timer这个类我把代码给大家看下package com.aiflow.test;import java.sql.SQLException;
import java.util.Timer;
import java.util.TimerTask;public class doseconds { private final Timer timer = new Timer(); 
    private final int seconds; 
    MySwing s = null;
    Test tt = null;
    private String serveraddress;
    private String SQLName;
    private String user;
    private String password;
    private String tableName;
    private int tian;
    private int count;// public doseconds(int seconds) { 
//        this.seconds = seconds; 
//    } 

public doseconds(int seconds, String serveraddress, String name,
String user, String password, String tableName, int tian,
int count) {
super();
this.seconds = seconds;
this.serveraddress = serveraddress;
SQLName = name;
this.user = user;
this.password = password;
this.tableName = tableName;
this.tian = tian;
this.count = count;
}
public void start() { 
     try {
     while(tt.getDate(serveraddress,SQLName,user,password,tableName,tian,count).size()!=0){
     timer.schedule(new TimerTask() { 
        public void run() { 
            playSound(); 
            timer.cancel(); 
        } 
        private void playSound() {
         s.realdotimedate();
            System.out.println("Your SQL is ready!"); 
        } 
    }, seconds * 1000); 
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    } public MySwing getS() {
return s;
} public void setS(MySwing s) {
this.s = s;
}
public Test getTt() {
return tt;
}
public void setTt(Test tt) {
this.tt = tt;
} }我运行程序之后报了这个错Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Timer already cancelled.
at java.util.Timer.sched(Unknown Source)
at java.util.Timer.schedule(Unknown Source)
at com.aiflow.test.doseconds.start(doseconds.java:43)
at com.aiflow.test.MySwing.dotimeDel(MySwing.java:398)
at com.aiflow.test.MySwing.doDelete(MySwing.java:326)
at com.aiflow.test.MySwing$2.mouseClicked(MySwing.java:157)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

解决方案 »

  1.   

    【问题分析】
    如果定时器被执行cancel方法停止之后,再执行schedule()方法的话,会报此异常:【java.lang.IllegalStateException: Timer already cancelled.】
    【解决方案】
    请检查生成Timer的对象的方式,如果要调用schedule()方法的话,Timer对象需要new一个出来,看Timer的构造器就知道了,
    在Timer的构造器中才会调用线程的start()方法。所以:如果你在Timer对象调用cancel()之后,如果要调用schedule()方法,需要
    保证Timer的对象是new出来的。摘自http://hi.baidu.com/wzgws/blog/item/d5db5633de6b08f31a4cff93.html