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

タイマーを 1 つだけ実行し、さまざまなイベントをすべて何らかの形で配置(if timeElapsed % timerinterval[1] == 0)して、1 つのタイマーだけを使用してさまざまな時間をシミュレートする方法について考えたことはありますか。次に、タイマー間隔を持つ整数の配列のみが必要です。

于 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 に答える