プログラムの実行が開始されてからの時間を評価し、時間が特定のしきい値を超えている場合に何かを行う if ステートメントがあります。この if ステートメントは、プログラムが実行されている間ずっとチェックされると同時に、プログラムの実行が継続されます。どうすればこれを行うことができますか?
ありがとうございました。
プログラムの実行が開始されてからの時間を評価し、時間が特定のしきい値を超えている場合に何かを行う if ステートメントがあります。この if ステートメントは、プログラムが実行されている間ずっとチェックされると同時に、プログラムの実行が継続されます。どうすればこれを行うことができますか?
ありがとうございました。
最も簡単な方法は、Timer
. if
これで、ロジックは必要ありません。firstTime
をスケジュールするときに引数を使用できますTimerTask
。
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
// do something
}
};
// schedule the task to be run every 100ms (0.1 sec),
// starting after "threshold" milliseconds have past
timer.schedule(task, threshold, 100);
時間のしきい値を超えたら「何かをする」ことを繰り返したいのか、それとも特定の時間が経過するまで待ってから「何かをする」ことを1回だけしたいのか、あなたの説明からは明らかではありません. 上記のコードは、繰り返しのケース用です。将来のある時点でワンショットが発生するようにするには、最後の行を次のように変更します。
timer.schedule(task, threshold);
Swing を使用している場合は、java.util.Timer ではなくSwing Timerを使用する必要があります。詳細については、スイング タイマーの使用方法を参照してください。
編集:あなたのコメントは物事を少し明確にしました。あなたが説明したことを行うのはかなり簡単です:
Timer timer = new Timer();
TimerTask task = new TimerTask() {
private final long start = System.currentTimeMillis();
@Override
public void run() {
if (System.currentTimeMillis() - start < threshold) {
// do something
} else {
// do something else
}
}
};
// schedule the task to be run every 100ms (0.1 sec), starting immediately
timer.schedule(task, 0, 100);
"do something" と "do something else" は、囲んでいるクラスへのメソッド呼び出しであることに注意してください。
よりクリーンなアプローチはTimerTask
、異なる時間に実行するようにスケジュールされた複数の を定義することです。例外をトリガーする「その他の何か」タスクは、しきい値時間に 1 回だけ実行するようにスケジュールできます。個々のタスクをキャンセルすることもできます。また、別のタスクをキャンセルするタスクをスケジュールすることもできます。