2

我知道我可能离这里很远,但我正在尝试创建一个计时器数组,以便 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);
}
4

3 回答 3

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应该没问题。

于 2012-04-13T02:58:53.300 回答
0

你有没有想过只做一个计时器,然后把所有不同的事件放在某种形式中(if timeElapsed % timerinterval[1] == 0),然后你可以只用一个计时器来模拟不同的时间。然后你只需要一个带有计时器间隔的整数数组。

于 2012-04-13T03:04:50.643 回答
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() 构造函数,而从未初始化您的各个计时器。相反,您应该将数组初始化为数组,将单个计时器初始化为 timers

于 2012-04-13T03:06:25.357 回答