2012-02-11 4 views
3

3秒ごとに、サーバーからメッセージを送信します。 これを行うには、私はこのコードを持っています。どうすればスレッドループを作成できますか?

try { 
     Thread.sleep(3500); 
     getPackets().sendGameMessage("[Server Message]: Remember to vote!"); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

コードはもちろん動作し、3秒半かかるとメッセージが送信されます。 しかし、どうすればループできるのですか?3秒半ごとに、停止せずに送信しますか?

答えて

0

上記のコードを別のスレッドで生成し、while(true)ループ内に囲みます。

+0

ご返信いただきありがとうございます。参考にして後で参考にさせていただきたいと思います。 –

3

Javaのネットワーキングに取り組んでいる人は、コードを無限ループに入れる方法がわからないことに少し驚いています。したがって、本当の質問が「もっと良い方法はありますか?」と疑問に思います。

この質問には、java.util.Timerを使用してメッセージを送信するか、またはExecutors.newScheduledThreadPool()から取得したScheduledExecutorServicescheduleAtFixedRate()を使用することを検討する必要があります。

+2

私の推測は独学です。おそらくビデオゲームの本を集め、マルチプレイヤーゲームを作ることについての章にまっすぐに行きました。 – Dave

0

この種のコードは、現在のスレッドをブロックし、プログラムロジックを不必要に乱雑にしているように見えるのであまり役に立ちません。バックグラウンドで送信を実行するワーカースレッドに委譲するほうがよいでしょう。また、Thread.sleepは不正確であることが知られています。最新のJavaバージョンのよう

、私はそれを行うための最もエレガントな方法はScheduledThreadPoolExecutorを使用していると思わ:

ScheduledThreadPoolExecutor executor = new ScheduledThraedPoolExecutor(1); 
executor.scheduleWithFixedDelay(new Runnable() { 
      public void run() { 
       getPackets().sendGameMessage("[Server Message]: Remember to vote!"); 
      } 
    }, 0, 3500, TimeUnit.MILLISECONDS); 

また、あなたがその迷惑なInterruptedExceptionを心配する必要はありません。

関連する問題