ホームページ > Java > &#&チュートリアル > 複数の SwingWorkers を管理し、ラベルを効率的に更新するにはどうすればよいですか?

複数の SwingWorkers を管理し、ラベルを効率的に更新するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-11 16:14:11
オリジナル
277 人が閲覧しました

How to Manage Multiple SwingWorkers and Update Labels Efficiently?

複数の SwingWorkers を待機しています

この質問では、それぞれがラベルの更新を担当する複数の SwingWorkers を作成し、次の場合にすべてのラベルを削除する方法を尋ねます。すべてのワーカーが終了しました。

1 つの解決策は、スレッドが待機できるようにする CountDownLatch を使用することです。実行を再開する前に、指定された数の他のスレッドがタスクを完了するようにします。提供されたコードでは、各ワーカーは完了時に latch.countDown() を呼び出しますが、スーパーバイザー ワーカーはすべてのタスクが終了するまで latch.await() をブロックします。その後、スーパーバイザーはラベルを更新するか、ラベルを完全に削除します (ただし、後者のオプションは一般に魅力的ではありません)。

このアプローチを示す拡張コード例を次に示します。

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.*;

/**
* @see https://stackoverflow.com/a/11372932/230513
* @see https://stackoverflow.com/a/3588523/230513
*/
public class WorkerLatchTest extends JApplet {

    private static final int N = 8;
    private static final Random rand = new Random();
    private Queue<JLabel> labels = new LinkedList<JLabel>();
    private JPanel panel = new JPanel(new GridLayout(0, 1));
    private JButton startButton = new JButton(new StartAction("Do work"));

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
ログイン後にコピー

以上が複数の SwingWorkers を管理し、ラベルを効率的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート