ホームページ >Java >&#&チュートリアル >Thread.sleep() を使用すると Java Swing UI がフリーズするのはなぜですか?

Thread.sleep() を使用すると Java Swing UI がフリーズするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 02:54:28513ブラウズ

Why Does My Java Swing UI Freeze When Using Thread.sleep()?

Thread.sleep() による Java Swing UI フリーズ

Java プログラミングでは、Thread.sleep() を使用すると便利です。実行中に一時停止を作成します。ただし、Swing アプリケーションに関しては、Thread.sleep() を使用すると、意図せず UI がフリーズ状態になる可能性があります。

この問題は、Thread.sleep() が現在のスレッドの実行をブロックするために発生します。通常は、Swing アプリケーションのイベント ディスパッチ スレッド (EDT) です。 EDT は、ボタンのクリック、マウスの動き、再描画などのすべての UI イベントを処理します。 EDT がスリープ状態のスレッドによってブロックされると、UI が応答しなくなり、フリーズしたように見えます。

タイマーを使用した解決策

この問題を回避し、応答性の高い UI を維持するには、 Thread.sleep() の代わりに javax.swing.Timer の使用を検討してください。タイマーを使用すると、EDT をブロックせずに、指定した遅延後にタスクが実行されるようにスケジュールできます。以下に例を示します。

<code class="java">Timer t = new Timer(1000 * 5, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // do your recurring task
    }
});</code>

この例では、5 秒ごとにアクション イベントを起動するタイマーが作成されます。指定されたアクション リスナーは、ディレクトリの変更の確認などの繰り返しタスクを実行できます。タイマーを使用してタスクをスケジュールすると、タスクは EDT から実行され、UI が応答しなくなるのを防ぎます。

以上がThread.sleep() を使用すると Java Swing UI がフリーズするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。