How to Update a JLabel Continuously with Long-Running Task Results?
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:
- Swing Timer for Repeating Tasks: The ActionListener within the Timer repeatedly invokes a task at a specified delay. This approach is applied here to trigger the long-running task.
- SwingWorker for Long Running Tasks: The SwingWorker class provides a mechanism to execute long-running tasks in a background thread without blocking the main (Event Dispatch) thread. In this context, the PingWorker is used to execute the pinging task.
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:
- The ActionListener in the Timer triggers the execution of the SwingWorker task (PingWorker) every delay milliseconds.
- The PingWorker executes the long-running pinging task in the background, returning the ping time once complete.
- Upon completion, the done() method in PingWorker updates the JLabel with the result.
- The pingTime() method establishes a socket connection to the specified host to measure the ping time.
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!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

Start Spring using IntelliJIDEAUltimate version...

Detailed explanation of the design of SKU and SPU tables on e-commerce platforms This article will discuss the database design issues of SKU and SPU in e-commerce platforms, especially how to deal with user-defined sales...

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

When using TKMyBatis for database queries, how to gracefully get entity class variable names to build query conditions is a common problem. This article will pin...
