如何在java中执行一组计时器

时间:2012-04-13 02:55:05

标签: java timer

我知道我可能会离开这里,但是我正在尝试创建一个计时器数组,以便mytimer [0] mytimer [1],mytimer [2]等...所有人都以不同的间隔开火,发送到服务器的差异事件。有任何想法吗? for循环值6是有机数,仅用于测试目的。稍后将根据程序的xml文件中的设置来确定此数字。

Timer mytimers[] = new Timer[6]; 
for(int i = 0;i < 6;i++){
    final int mytime = i;
    mytimers[i].scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            //do action
            sendData("Timer " + mytime + " fired");              
        }
    }, 10000, i*1000);
}

3 个答案:

答案 0 :(得分:7)

Timer mytimers[] = new Timer(); 

我假设这是不起作用的线路?您无法使用对象初始化数组;用数组初始化它:

Timer mytimers[] = new Timer[6];

再猜测一下,你也没有初始化个别计时器:

mytimers[i].scheduleAtFixedRate(new TimerTask() {

此时,mytimers [i]没有设置任何内容,那么如何在其上调用scheduleAtFixedRate?首先初始化它:

mytimers[i] = new Timer();
mytimers[i].scheduleAtFixedRate(new TimerTask() {

编辑:

你的“IllegalArgumentException:非正面期限。”是因为第一次通过循环,i = 0,所以i * 1000 = 0,并且句点不能为0(“每0秒零运行一次此事件”)。

i = 1开始,应该没问题。

答案 1 :(得分:0)

您是否考虑过只做一个计时器,并将所有不同的事件放在某种(if timeElapsed % timerinterval[1] == 0)中,然后就可以通过一个计时器来模拟不同的时间。那么你只需要一个具有定时器间隔的整数数组。

答案 2 :(得分:0)

使用此:

Timer mytimers[] = new Timer[6]; 
for(int i = 0;i < 6;i++){
    mytimers[i] = new Timer();
    final int mytime = i;
    mytimers[i].scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            //do action
            sendData("Timer " + mytime + " fired");              
        }
    }, 10000, i*1000);
}

问题是,您正在调用数组上的Timer()构造函数,并且从不初始化您的个人计时器。相反,您应该将数组初始化为数组,将各个计时器初始化为计时器