Heim > Java > javaLernprogramm > Wie kann SwingWorker die Reaktionsfähigkeit in Java Swing-Anwendungen verbessern?

Wie kann SwingWorker die Reaktionsfähigkeit in Java Swing-Anwendungen verbessern?

Patricia Arquette
Freigeben: 2024-12-06 07:57:13
Original
889 Leute haben es durchsucht

How can SwingWorker Improve Responsiveness in Java Swing Applications?

SwingWorker in Java implementieren

In einer früheren Frage zum Neuzeichnen aus einer anderen Klasse wurde das Konzept von SwingWorker erwähnt. In diesem Artikel soll die Verwendung von SwingWorker erläutert werden, insbesondere im Kontext des in der ursprünglichen Frage bereitgestellten Codeausschnitts.

SwingWorker verstehen

SwingWorker ist eine Dienstprogrammklasse in Java, das die Ausführung zeitaufwändiger Aufgaben in Swing-Anwendungen erleichtert. Dadurch können diese Aufgaben in einem separaten Thread ausgeführt werden, wodurch verhindert wird, dass die GUI blockiert.

SwingWorker implementieren

Zur Verwendung von SwingWorker, einer neuen Klasse, die es erweitert erstellt werden sollte. In dieser Klasse sollte Folgendes implementiert werden:

  1. doInBackground(): Diese Methode enthält die lang laufende Aufgabe. Es läuft in einem separaten Thread.
  2. done(): Diese Methode wird aufgerufen, wenn die doInBackground()-Methode abgeschlossen ist. Es wird verwendet, um die Ergebnisse der Aufgabe zu verarbeiten und die GUI zu aktualisieren.

Zum Beispiel:

class AnswerWorker extends SwingWorker<Integer, Integer> {

    @Override
    protected Integer doInBackground() throws Exception {
        // Perform a time-consuming task here.
        Thread.sleep(1000);
        return 42;
    }

    @Override
    protected void done() {
        try {
            // Display the result of the task in a message box.
            JOptionPane.showMessageDialog(f, get());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Nach dem Login kopieren

SwingWorker aufrufen

Um den SwingWorker aufzurufen, rufen Sie seine Methodeexecute() auf. Typischerweise kann dies über einen Event-Handler wie einen ActionListener erfolgen:

JButton b = new JButton("Answer!");
b.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        new AnswerWorker().execute();
    }
});
Nach dem Login kopieren

Beispiel:

Der folgende Code demonstriert die Verwendung von SwingWorker in einfacher Form GUI-Anwendung:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;

public class SwingWorkerExample {

    public static void main(String[] args) {
        makeGUI();
    }

    private static void makeGUI() {
        final JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new FlowLayout());

        // Create and invoke SwingWorker.
        JButton answerButton = new JButton("Answer!");
        answerButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new AnswerWorker().execute();
            }
        });

        f.getContentPane().add(answerButton);
        f.pack();
        f.setVisible(true);
    }

    private static class AnswerWorker extends SwingWorker<Integer, Integer> {

        @Override
        protected Integer doInBackground() throws Exception {
            // Perform a time-consuming task.
            Thread.sleep(1000);
            return 42;
        }

        @Override
        protected void done() {
            try {
                // Display the result of the task in a message box.
                JOptionPane.showMessageDialog(f, get());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
Nach dem Login kopieren

Durch die Verwendung von SwingWorker auf diese Weise bleibt die GUI reaktionsfähig, während die zeitaufwändige Aufgabe ausgeführt wird eseguito im Hintergrund.

Das obige ist der detaillierte Inhalt vonWie kann SwingWorker die Reaktionsfähigkeit in Java Swing-Anwendungen verbessern?. 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