4

シナリオ
人気のあるカードゲームのクローンを作成しています。人々がゲームに参加できる期間が必要です。時々、期間が短すぎます。ですから、待ち時間を長くしてもらいたいです。例の番号の場合、デフォルトの「ロビー時間」は45秒で、各延長は15秒です。

問題
Javaのタイマーを使用することにしました。'lobby'が開始すると、TimerTaskは今から45秒後にスケジュールされます。

UnoStartTimer.schedule(new UnoStartTask(), 45000);

誰かが遅延を延長したいとき、これは私が実行したい擬似コードです:

UnoStartTimer.reschedule(UnoStartTimer.getNextScheduledTime() + 15000);

javadocをざっと見てみると、Timerクラスを使用したこのような簡単なソリューションは存在しないことがわかります。

これが私が思いついた可能性です:

  • 別のスケジューリングクラスを使用する必要があります(別の質問への回答でScheduledExecutorServiceと呼ばれるものを見たと思いますが、すぐには問題の解決策ではなかったようです)
  • タイマーでこれを行う方法があります、そして私はそれを露骨に見落としています
  • これを行う簡単な方法はありません

それで、それはどれですか?

4

2 に答える 2

0

Timer のドキュメントによると、Java 1.5 以降では、代わりに ScheduledThreadPoolExecutor を使用する必要があります。(使いやすくするために Executors.newSingleThreadScheduledExecutor() を使用してこのエグゼキュータを作成することをお勧めします。これにより、Timer によく似たものが作成されます。)

この投稿を参照してください - >リセット可能なJavaタイマー

于 2013-11-14T20:59:50.993 に答える
0

java.util.Timerを見てください。特に、cancel() メソッドがあります。また、ミリ秒数ではなく Date オブジェクトを受け取る schedule() メソッドも見られます。

今から 45 秒後の Date オブジェクトを作成し、その時間でタイマーをスケジュールし、延長が発生した場合はキャンセルし、元の Date オブジェクトに 15 秒を追加して、その新しい時間でタスクをスケジュールします。

于 2012-06-21T15:50:24.910 に答える