1

すぐ下にコードがあります...見てください。

enter.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (enter.getText().length()>0){

            addToChat("You: "+enter.getText());
                enter.setText("");
                delay(1000);
                addToChat("oie");
            }

        }
    });

そして、これが遅延ボイドです。

  public static void delay(int delayTime){
    try
    {
        Thread.sleep(delayTime);
    } catch (InterruptedException ie)
    {
    }
}

問題は、テキストボックスに何かを入力してEnterキーを押すと、テキスト領域に表示されるだけでなく、「You:」テキストブロックも表示されるまでに1秒かかることです。これは遅延の前です。 。この遅延がその前に影響を与えるのはなぜですか?また、これを修正するにはどうすればよいですか?

4

2 に答える 2

2

アクションリスナーが終了する前に、UIを更新する機会はありません。遅延後に何かを変更したい場合は、イベントハンドラー内で待機するのではなく、別のスレッドでスケジュールする必要があります。

addToChat("You: "+enter.getText());
enter.setText("");
new Thread(
    new Runnable() {
        public void run() {
            delay(1000);
            addToChat("oie");
        }
    }
).start();
于 2012-06-02T00:19:22.430 に答える
1

イベントディスパッチスレッドを使用しています。これは、UIがフリーズしていて、それ自体を再描画したり、入力を受け入れたりsleep()することができないことを意味します。この影響を回避するには、EDTで非常に迅速なアクションのみを実行する必要があります。UIプログラミングの基本については、グラフィカルユーザーインターフェイスと次のチュートリアルトレイルを確認してください。

于 2012-06-02T00:21:22.767 に答える