3

ええと、私はJavaでオンラインゲームに取り組んでいます。クライアントとサーバーがあります。そして、音声システムは、次のように新しいメッセージが表示されるのを待ちます。

public void addSpeech(String msg) {
    String newMsg = parsel10n(msg);
    m_narrator.addSpeech(parsel10n(newMsg));
    while (!m_narrator.getCurrentLine().equalsIgnoreCase(newMsg))
      ;
    while (!m_narrator.getAdvancedLine().equalsIgnoreCase(newMsg))
      ;
 } 

問題は..whileループが原因でアプリケーションの残りの部分が停止することです。このループにいる間、他のプレイヤーが移動したりチャットを見たりすることはありません。ループでアプリケーション(クライアント)の残りの部分に触れることなく、このメソッドを実行できる方法はありますか?スレッドを含める必要がありますか?あなたが私に答えてくれることを願っています。

4

3 に答える 3

7

はい、スレッドが関与する必要があります。

メインの実行スレッドと並行してタスクを起動したい場合は、次のようにします。

new Thread(){
   public void run(){
        addSpeech();
   }
}.start();

ただし、データ構造に複数のスレッドからアクセスできることを確認する必要があります。

そして、タスクの終わりなどで何かをしたいと思うかもしれません。そこで、Javaスレッドとタスクキューについてのチュートリアルを探すことをお勧めします。

于 2012-09-10T16:15:42.383 に答える
0

複数のタスクを同時に実行するには、複数のスレッドを使用する必要があります。

いずれにせよ、GUIスレッドで些細な計算や遅延以外のことを行うのは悪い習慣と見なされます。そうしないと、一定期間ロックする可能性があります。

于 2012-09-10T16:16:55.143 に答える
0

マルチスレッドを使用します。詳細については、java.util.concurrentパッケージを参照してください。シグナリングと通知にオブザーバーパターンを使用できます。

于 2012-09-10T16:19:20.257 に答える