我知道我可能会离开这里,但是我正在尝试创建一个计时器数组,以便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);
}
答案 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()构造函数,并且从不初始化您的个人计时器。相反,您应该将数组初始化为数组,将各个计时器初始化为计时器。