Heim >Java >javaLernprogramm >Wie kann SwingWorker das Einfrieren der GUI in Java verhindern?

Wie kann SwingWorker das Einfrieren der GUI in Java verhindern?

Susan Sarandon
Susan SarandonOriginal
2024-12-22 15:38:14458Durchsuche

How Can SwingWorker Prevent GUI Freezes in Java?

SwingWorker in Java verwenden

Einführung

Auf dem Event Dispatch ausgeführte Aufgaben mit langer Laufzeit Thread kann die GUI einfrieren. Dieses Problem kann durch die Verwendung von SwingWorker behoben werden, der die Ausführung solcher Aufgaben in einem separaten Thread unterstützt.

So verwenden Sie SwingWorker

  1. Definieren eine Unterklasse von SwingWorker: Die Unterklasse sollte eine doInBackground-Methode definieren, in der die lang laufende Aufgabe ausgeführt wird, und eine done-Methode, die ausgeführt wird Wird aufgerufen, wenn die Aufgabe abgeschlossen ist.
  2. SwingWorker ausführen: Die Methode „execute“ wird verwendet, um den SwingWorker in einem separaten Thread zu starten. Sie können dies mit einem Ereignis verknüpfen, beispielsweise mit einem Klick auf eine Schaltfläche.
  3. Verarbeiten des Ergebnisses: Die get-Methode kann verwendet werden, um das Ergebnis der Aufgabe nach Abschluss abzurufen. Dies kann in der done-Methode oder im Event-Handler erfolgen, der den SwingWorker gestartet hat.

Beispiel

In diesem Beispiel wird ein SwingWorker zur Ausführung verwendet eine zeitaufwändige Aufgabe und zeigt eine Sekunde später ein Meldungsfeld mit dem Ergebnis an:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SwingWorkerExample {

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

        class AnswerWorker extends SwingWorker<Integer, Integer> {
            protected Integer doInBackground() throws Exception {
                Thread.sleep(1000);
                return 42;
            }

            protected void done() {
                JOptionPane.showMessageDialog(f, get());
            }
        }

        JButton b = new JButton("Answer!");
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new AnswerWorker().execute();
            }
        });

        f.getContentPane().add(b);
        f.getContentPane().add(new JButton("Nothing"));
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(SwingWorkerExample::makeGUI);
    }
}

Das obige ist der detaillierte Inhalt vonWie kann SwingWorker das Einfrieren der GUI in Java verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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