Heim > Java > javaLernprogramm > Hauptteil

Wie verwende ich Swing Timer und SwingWorker für eine effiziente GUI-Aufgabenverwaltung in Java?

Mary-Kate Olsen
Freigeben: 2024-10-24 05:31:30
Original
545 Leute haben es durchsucht

How to Use Swing Timer and SwingWorker for Efficient GUI Task Management in Java?

Verwendung von Swing Timer und SwingWorker für sich wiederholende und lang laufende Aufgaben in der GUI

In einer grafischen Benutzeroberfläche (GUI), Pflege der Die Reaktionsfähigkeit der Anwendung ist entscheidend. Das Ausführen lang andauernder oder sich wiederholender Aufgaben wie Netzwerkanrufe oder umfangreiche Berechnungen kann bei unsachgemäßer Handhabung zum Einfrieren der Benutzeroberfläche führen.

Swing-Timer für sich wiederholende Aufgaben

Für Aufgaben die sich in regelmäßigen Abständen wiederholen müssen (z. B. das Aktualisieren eines Etiketts mit Daten von einem Server), stellt Swing die Timer-Klasse bereit. Ein Timer kann mit einer Verzögerung und einem ActionListener konfiguriert werden, der die Aktionen definiert, die ausgeführt werden sollen, wenn der Timer ausgelöst wird.

SwingWorker für lang laufende Aufgaben

SwingWorker ist ein Swing Komponente, die SwingUtilities erweitert und für Aufgaben konzipiert ist, die einen längeren Zeitraum in Anspruch nehmen. Es ermöglicht Ihnen, die Aufgabe in einem Hintergrundthread auszuführen und gleichzeitig die Reaktionsfähigkeit der Benutzeroberfläche aufrechtzuerhalten. Wenn die Aufgabe abgeschlossen ist, benachrichtigt der SwingWorker den Hauptthread, um die Benutzeroberfläche mit dem Ergebnis zu aktualisieren.

Beispiel: Aktualisieren eines Labels mit Server-Ping-Ergebnissen

Zur Demonstration des Bei der kombinierten Verwendung von Timer und SwingWorker beachten Sie bitte den folgenden Codeausschnitt:

<code class="java">import javax.swing.*;
import java.awt.event.*;
import java.net.Socket;

public class LabelUpdateExample {

    private static String hostnameOrIP = "stackoverflow.com";
    private static int delay = 5000;
    private static JLabel label = new JLabel("0000");

    public static void main(String[] args) {
        label.setFont(label.getFont().deriveFont(120f));

        ActionListener timerListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new PingWorker().execute();
            }
        };
        Timer timer = new Timer(delay, timerListener);

        timer.start();
        JOptionPane.showMessageDialog(
                null, label, hostnameOrIP, JOptionPane.INFORMATION_MESSAGE);
        timer.stop();
    }

    private static class PingWorker extends SwingWorker {

        private int time;

        @Override
        protected Object doInBackground() throws Exception {
            time = pingTime();
            return new Integer(time);
        }

        @Override
        protected void done() {
            label.setText("" + time);
        }
    }

    private static int pingTime() {
        Socket socket = null;
        long start = System.currentTimeMillis();
        try {
            socket = new Socket(hostnameOrIP, 80);
        } catch (Exception weTried) {
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (Exception weTried) {}
            }
        }
        long end = System.currentTimeMillis();
        return (int) (end - start);
    }
}</code>
Nach dem Login kopieren

Dieser Code erstellt ein JLabel, das die Ping-Zeit für einen angegebenen Host anzeigt und sie mithilfe eines Timers alle 5 Sekunden aktualisiert. Der Ping-Vorgang wird in einem Hintergrundthread mit SwingWorker ausgeführt, um ein Einfrieren der Benutzeroberfläche zu vermeiden. Wenn der Ping abgeschlossen ist, aktualisiert der SwingWorker die Bezeichnung mit dem Ergebnis und stellt so sicher, dass die GUI während der lang andauernden Aufgabe reaktionsfähig bleibt.

Das obige ist der detaillierte Inhalt vonWie verwende ich Swing Timer und SwingWorker für eine effiziente GUI-Aufgabenverwaltung in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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