Rumah >Java >javaTutorial >Bagaimana untuk Mengemas kini JLabel Secara Berterusan Menggunakan Pemasa Swing dan SwingWorker?
Menggunakan Swing Timer dan SwingWorker untuk Mengemas kini JLabel Secara Berterusan
Untuk mengemas kini JLabel secara kerap dengan hasil aktiviti yang memakan masa, adalah disyorkan untuk menggunakan kedua-dua Pemasa Swing dan SwingWorker. Pemasa Swing mengendalikan tugas berulang, manakala SwingWorker menguruskan usaha yang memakan masa. Berikut ialah contoh kod yang menggambarkan cara strategi ini berfungsi:
<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>
Untuk mendapatkan butiran lanjut mengenai Benang Penghantaran Acara dan melaksanakan tugas berulang atau lanjutan dalam GUI, sila rujuk dokumen Concurrency in Swing.
Cara Kod Berfungsi:
Dengan menggunakan teknik ini, anda boleh terus mengemas kini JLabel dengan hasil terkini tugas yang memakan masa, membolehkan pemantauan masa nyata dan pengguna interaksi.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini JLabel Secara Berterusan Menggunakan Pemasa Swing dan SwingWorker?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!