0

特定の反復プロセスを段階的に表示する GUI があります。1歩作って、その歩数を表示して、1秒待って、繰り返して欲しい…

コード:

while (! finished()) {
    advance(); // make and display one step
    try {
        Thread.sleep(1000);
    }
    catch (InterruptedException e) {       
    }
}

ただし、すべてのスリープ呼び出しの追加時間が経過するまで何も出力されず、すべてのステップが一度に出力されます。実行フローをシーケンシャルにするにはどうすればよいですか?

注: スリープ コールを非常に長く無駄なループに置き換えてみましたが、動作は同じでした。

4

1 に答える 1

2

このタスクは別のスレッドで行う必要があります。GUIをフリーズしています。使用できますSwingWorker。ここに素敵な記事がありますなぜ SwingWorker が必要なのですか?

swingWorker は 1 回だけ実行されることに注意してください。より多くの時間を実行したい場合は、以下javax.swing.Timerも 確認する必要があります

Swing タイマーのタスクは、イベント ディスパッチ スレッドで実行されることに注意してください。これは、タスクがコンポーネントを安全に操作できることを意味しますが、タスクを迅速に実行する必要があることも意味します。タスクの実行に時間がかかる場合は、タイマーの代わりに、またはタイマーに加えて SwingWorker を使用することを検討してください。

于 2013-06-22T19:18:10.370 に答える