Heim  >  Artikel  >  Java  >  Wie verwende ich SwingWorker und Timer, um JLabel mit den Ergebnissen lang laufender Aufgaben in Java zu aktualisieren?

Wie verwende ich SwingWorker und Timer, um JLabel mit den Ergebnissen lang laufender Aufgaben in Java zu aktualisieren?

Barbara Streisand
Barbara StreisandOriginal
2024-10-23 23:24:30234Durchsuche

How to Use SwingWorker and Timer to Update JLabel with Results of Long Running Tasks in Java?

Verwenden Sie SwingWorker, um JLabel wiederholt mit Ergebnissen einer lang laufenden Aufgabe zu aktualisieren

Diese Frage befasst sich mit der Notwendigkeit, ein JLabel regelmäßig mit Ergebnissen von a zu aktualisieren lang andauernde Aufgabe. Um dies mit Java zu erreichen, sollte man eine Kombination aus Swing Timer und SwingWorker verwenden.

Swing Timer für wiederholte Aufgaben

Ein Swing Timer bietet eine praktische Möglichkeit, wiederkehrende Aufgaben zu planen Aufgaben in einer GUI. In diesem Fall verwenden wir den Timer, um die Aufgabe mit langer Laufzeit in regelmäßigen Abständen auszuführen.

SwingWorker für Aufgaben mit langer Laufzeit

SwingWorker ist eine Unterklasse von SwingUtilities Ermöglicht die Ausführung von Aufgaben in einem separaten Thread und sorgt dafür, dass die GUI reagiert. Hier führt SwingWorker die langwierige Aufgabe aus, einen Server anzupingen und das JLabel mit dem Ergebnis zu aktualisieren.

Beispielimplementierung

Der folgende Code zeigt, wie dies implementiert wird Ansatz:

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

public class PingLabelUpdater {

    public static void main(String[] args) {
        final JLabel label = new JLabel("0000");
        ActionListener timerListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new PingWorker().execute();
            }
        };
        Timer timer = new Timer(1000, timerListener);

        label.setFont(label.getFont().deriveFont(120f));
        JOptionPane.showMessageDialog(null, label, "stackoverflow.com", JOptionPane.INFORMATION_MESSAGE);
        timer.stop();
    }

    static class PingWorker extends SwingWorker {
        int time;
        @Override
        protected Object doInBackground() throws Exception {
            time = pingTime("stackoverflow.com");
            return new Integer(time);
        }
        @Override
        protected void done() {
            label.setText("" + time);
        }
    }

    public static int pingTime(String hostnameOrIP) {
        Socket socket = null;
        long start = System.currentTimeMillis();
        try {
            socket = new Socket(hostnameOrIP, 80);
        } catch (Exception e) {
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (Exception e) {}
            }
        }
        long end = System.currentTimeMillis();
        return (int) (end - start);
    }
}</code>

In diesem Beispiel stellt die pingTime-Methode eine Verbindung zum angegebenen Server (stackoverflow.com) her und misst die dafür benötigte Zeit. Die doInBackground-Methode des SwingWorker führt den Ping durch und die done-Methode aktualisiert die Beschriftung mit der Ping-Zeit. Der Timer ist so konfiguriert, dass er den SwingWorker in einem Intervall von 1000 Millisekunden (1 Sekunde) ausführt.

Durch die Kombination von Swing Timer und SwingWorker aktualisieren wir das JLabel effektiv mit Ping-Zeiten, ohne den GUI-Thread zu blockieren, und stellen so einen reaktionsschnellen Benutzer sicher Benutzeroberfläche, während die Aufgabe im Hintergrund ausgeführt wird.

Das obige ist der detaillierte Inhalt vonWie verwende ich SwingWorker und Timer, um JLabel mit den Ergebnissen lang laufender Aufgaben in Java zu aktualisieren?. 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