1

重複の可能性:
Java での GUI スレッド

私はテキストベースのゲームを作ろうとしてきましたが、Thread.sleep() と wait() を使用するときのこの奇妙なバグを除いて、これまでのところ進んでいますそれぞれの間。

これがwait()のコードです

int i=0;
synchronized(mon) {
    while(i<msg.length())
    {
        console.setText(console.getText()+ msg.charAt(i));
        i++;
        try {
            mon.wait(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
} 

sleep() を使用したコードは次のとおりです。

int i=0;
    while(i<msg.length())
    {
        console.setText(console.getText()+ msg.charAt(i));
        i++;
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

ただし、このコードに到達すると、プログラムは msg.length*500ms 待機し、メッセージ全体を即座に出力します。ヘルプ!

4

1 に答える 1

6

これは通常の問題です。「イベント ディスパッチ スレッド」(EDT) をブロックしてはなりません。

EDT は、コンポーネントの描画とイベントのディスパッチの両方を担当します。したがって、このスレッドをブロックすると、メソッドを離れて制御を EDT に戻した後に次の再描画が行われます。

EDT の外で「アニメーション」を実行する必要があります。

これらのキーワードを使用して、このサイト、Google、または Swing チュートリアルを検索すると、多くの情報が得られます。

于 2012-12-15T21:43:46.743 に答える