Update JLabel Repeatedly with Results of Long Running Task
Problem:
A Java program attempts to continuously update a JLabel with the results of a long-running task (pinging a server). While the initial implementation only performed the task once, an attempt to create a repeating task fails to function.
Solution:
To address this issue, the program utilizes two techniques:
Code Snippet:
The following code combines these techniques to achieve the desired behavior:
<code class="java">import java.awt.event.*; import javax.swing.*; import java.net.Socket; public class LabelUpdateUsingTimer { static String hostnameOrIP = "stackoverflow.com"; int delay = 5000; JLabel label = new JLabel("0000"); LabelUpdateUsingTimer() { 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(); } class PingWorker extends SwingWorker { int time; @Override protected Object doInBackground() throws Exception { time = pingTime(); return new Integer(time); } @Override protected void done() { label.setText("" + time); } }; public 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); } public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { new LabelUpdateUsingTimer(); } }; SwingUtilities.invokeLater(r); } }</code>
Explanation:
This implementation ensures that the JLabel is updated repeatedly with the latest ping time without hindering the responsiveness of the GUI.
The above is the detailed content of How to Update a JLabel Continuously with Long-Running Task Results?. For more information, please follow other related articles on the PHP Chinese website!