Kemas kini JLabel Berulang Kali dengan Keputusan Tugasan Yang Berlangsung Lama
Masalah:
Aturcara Java cuba mengemas kini JLabel secara berterusan dengan hasil tugasan yang telah berjalan lama (ping pelayan). Walaupun pelaksanaan awal hanya melaksanakan tugas sekali, percubaan untuk mencipta tugasan berulang gagal berfungsi.
Penyelesaian:
Untuk menangani isu ini, program menggunakan dua teknik:
Snippet Kod:
Kod berikut menggabungkan teknik ini untuk mencapai gelagat yang diingini:
<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>
Penjelasan:
Pelaksanaan ini memastikan JLabel dikemas kini berulang kali dengan masa ping terkini tanpa menghalang responsif GUI.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini JLabel Secara Berterusan dengan Keputusan Tugasan Berlangsung Lama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!