Swing Timer 및 SwingWorker를 사용하여 JLabel을 지속적으로 업데이트
시간이 많이 걸리는 활동의 결과로 JLabel을 정기적으로 업데이트하려면, Swing Timer와 SwingWorker를 모두 사용하는 것이 좋습니다. Swing Timer는 반복 작업을 처리하고 SwingWorker는 시간이 많이 걸리는 작업을 관리합니다. 다음은 이 전략의 작동 방식을 보여주는 샘플 코드입니다.
<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>
이벤트 디스패치 스레드 및 GUI에서 반복적이거나 확장된 작업 실행에 대한 자세한 내용은 Swing 문서의 동시성을 참조하세요.
코드 작동 방식:
이 기술을 사용하면 시간이 많이 걸리는 작업의 최신 결과로 JLabel을 지속적으로 업데이트하여 실시간 모니터링 및 사용자 사용이 가능합니다. 상호작용.
위 내용은 Swing Timer 및 SwingWorker를 사용하여 JLabel을 지속적으로 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!