>Java >java지도 시간 >Swing Timer 및 SwingWorker를 사용하여 JLabel을 지속적으로 업데이트하는 방법은 무엇입니까?

Swing Timer 및 SwingWorker를 사용하여 JLabel을 지속적으로 업데이트하는 방법은 무엇입니까?

원래의
2024-10-23 22:21:01281검색

How to Continuously Update a JLabel Using Swing Timer and SwingWorker?

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 문서의 동시성을 참조하세요.

코드 작동 방식:

  1. 초기화: LabelUpdateUsingTimer 생성자는 레이블이라는 JLabel을 초기화하고 해당 글꼴을 설정합니다.
  2. ActionListener 및 Timer: TimerListener라는 ActionListener가 생성되며 매 지연 밀리초마다 PingWorker의 실행을 트리거합니다. 그런 다음 Timer 객체는 Delay 및 TimerListener를 인수로 사용하여 시작되고 이어서 시작됩니다.
  3. JOptionPane: JLabel은 지정된 호스트 이름OrIP를 사용하여 JOptionPane 대화 상자 내에 표시됩니다.
  4. PingWorker: SwingWorker 하위 클래스인 PingWorker 클래스는 백그라운드 스레드에서 시간이 많이 소요되는 작업을 수행합니다.
  5. Ping Time: pingTime 메서드는 지정된 호스트 이름 또는 IP에 대한 TCP 연결을 수행하고 대기 시간을 계산합니다.

이 기술을 사용하면 시간이 많이 걸리는 작업의 최신 결과로 JLabel을 지속적으로 업데이트하여 실시간 모니터링 및 사용자 사용이 가능합니다. 상호작용.

위 내용은 Swing Timer 및 SwingWorker를 사용하여 JLabel을 지속적으로 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.