Heim >Java >javaLernprogramm >Wie verwende ich SwingWorker und Timer, um JLabel mit den Ergebnissen lang laufender Aufgaben in Java zu aktualisieren?
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!