我想弄一个定时器,如果一个特定事件到达,则每隔十秒钟输出一句话,如果没有其他事件达到的话则在30秒后输出第三句话就结束程序,如果有另外事件到达的话则重新从第一句输出开始,每隔十秒输出一句话,总共也输出三句话,如果还有另外事件到达的话,则又重新从第一句话输出开始,依次类推也就是说,如果事件多的话(中间间隔没有超过30秒),永远都有语句输出,除非某个特定事件从开始执行开始后30秒内没有其他事件到达
我自己试着写一了一段代码,源程序如下:
import java.rmi.RemoteException;
import java.util.TimerTask;public class Timetask extends TimerTask{
private static int i=0;
ServerImpl server=ServerImpl.getServer();
public Timetask(int i)
{
seti(i);
}
public void seti(int i)
{
this.i=i;
}
public int geti()
{
return i;
}
public void run() {
String time="一";
if(i>0&&i<3)
{
if(i==2)
time="二";
//String lastmessage=server.lastmessage;
//String ci="次";
//String message=lastmessage+time+ci;
//server.time(message);
                System.out.println(time);
}
if(i==3)
{
//String lastmessage=server.lastmessage;
time="三";
//String ci="次,物品由";
//String lastname=server.lastname;
//String huode="获得!";
//String message=lastmessage+time+ci+lastname+huode;
//server.time(message);
//server.notifyListener("断开");
                        System.out.println(time);
}
i++;
}
}
在另外一个类中,通过static Timer timer = new Timer();timer.schedule (new Timetask(0),1000,1000*10);来调用run()方法。但是无论有几个事件达到,所有输出语句都是在30秒内执行,在第十秒之前输出若干个"一",第20秒输出若干个"一"和"二",第30秒输出若干个"一","二"和"三",这是上面原因,怎么样才能达到理想效果
如果用timer.scheduleAtFixedRate(new Timetask(0),1000,1000*10);结果一样,timer.schedule和timer.scheduleAtFixedRate竟然没有区别 

解决方案 »

  1.   

    final Timer t = new Timer();
    t.schedule(new TimerTask(){
        int count=0;
        public void run() {
    this.count++;
    //说话的代码
    if(this.count==3){
        t.cancel();
    }
        }
    },0,10000);
      

  2.   

    "但是无论有几个事件达到,所有输出语句都是在30秒内执行"是因为你没有cancel(); 看你的意思得把
    Timer对象做为全局属性,如果之前有一个事伯启动Timer,则先cancel();
    再重新创建一个新的Timer对象