1

私はプログラムに取り組んでおり、現在問題を解決しようとしています。プログラムの目的は、データベースからレコードを読み取り、特定のトリガーで情報を引き出し、その情報を GUI に表示することです。ここでの問題は、データベースからそのデータを取得して GUI に表示し、それが画面に表示されるまでしばらく待ってから、次のデータに対して同じことを行い、ループスルーすることです。

データを取得して GUI の画面に表示することはできますが、問題はその一時停止を許可することです。

私は Thread.sleep を試しましたが、そうすることは推奨されていないことを読みました。

推奨されると思われるのは、SwingWorker や Timer を利用することです。私はこれら 2 つの学習にかなりの時間を費やしましたが、それを完全に理解して自分のプログラムに適用するのは困難です。私の問題とプログラムの目的を考えると、SwingWorker と Timer の重要性を説明できる人はいますか?

4

2 に答える 2

4

警告:

UI とのすべての対話、更新、作成は、イベント ディスパッチ スレッドのコンテキスト内から実行する必要があります。

javax.swing.Timer

Swing Timer は、EDT のコンテキスト内で実行されることが保証されている定期的なコールバックをセットアップできる特別なタイマーです。

スイングワーカー

SwingWorkerバックグラウンドでコードを実行するためのメカニズムを提供すると同時に、EDT 内の UI への更新を同期するための簡単な (少なくとも簡単な) メカニズムを提供することにより、UI 開発者の作業を楽にするように設計されたソリューションです。

あなたの問題についてはSwingWorker、UIの応答性に影響を与えることなくバックグラウンドで一時停止できるため、の使用をお勧めします

SwingWorker worker = new SwingWorker<Object, Object> {

    public void doInBackground() throws Exception {
        while (!loadingDone) {
            Object data = loadMoreData();
            publish(data);
        }
        // This only matter if you actually care about the result
        // of what has being processed here...
        return null;
    }

    public void process(List<Object> chunks) {
         // Now in the UI...
    }

}

チェックアウト...

詳細については...

于 2013-07-03T00:55:38.607 に答える