Heim > Java > javaLernprogramm > Wie verwaltet man mehrere SwingWorker und aktualisiert Etiketten effizient?

Wie verwaltet man mehrere SwingWorker und aktualisiert Etiketten effizient?

Susan Sarandon
Freigeben: 2024-12-11 16:14:11
Original
277 Leute haben es durchsucht

How to Manage Multiple SwingWorkers and Update Labels Efficiently?

Warten auf mehrere SwingWorker

Bei dieser Frage geht es darum, wie man mehrere SwingWorker erstellt, von denen jeder für die Aktualisierung eines Labels verantwortlich ist, und wie man alle Labels entfernt, wenn alle Worker sind fertig.

Eine Lösung besteht darin, einen CountDownLatch zu verwenden, der es einem Thread ermöglicht, auf eine bestimmte Anzahl anderer Threads zu warten ihre Aufgaben abzuschließen, bevor sie mit der Ausführung fortfahren. Im bereitgestellten Code ruft jeder Worker nach Abschluss die Funktion „latch.countDown()“ auf, während ein Supervisor-Worker die Funktion „latch.await()“ blockiert, bis alle Aufgaben abgeschlossen sind. Der Supervisor aktualisiert dann die Beschriftungen oder entfernt sie ganz (wobei letztere Option im Allgemeinen unattraktiv ist).

Hier ist ein erweitertes Codebeispiel, das diesen Ansatz demonstriert:

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();
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie verwaltet man mehrere SwingWorker und aktualisiert Etiketten effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage