SwingWorker とタイマーを使用して、Java で長時間実行されるタスクの結果で JLabel を更新する方法

Barbara Streisand
リリース: 2024-10-23 23:24:30
オリジナル
233 人が閲覧しました

How to Use SwingWorker and Timer to Update JLabel with Results of Long Running Tasks in Java?

長時間実行タスクの結果を使用して SwingWorker を使用して JLabel を繰り返し更新します

この質問は、タスクの結果で JLabel を定期的に更新する必要性について説明します。長時間実行されるタスク。 Java を使用してこれを実現するには、Swing Timer と SwingWorker を組み合わせて使用​​する必要があります。

繰り返しタスク用の Swing Timer

Swing Timer は、繰り返しのスケジュールを設定する便利な方法を提供します。 GUI でのタスク。この場合、タイマーを使用して、長時間実行タスクを定期的に実行します。

長時間実行タスク用の SwingWorker

SwingWorker は、SwingUtilities のサブクラスです。別のスレッドでタスクを実行できるようになり、GUI の応答性が維持されます。ここで、SwingWorker は、サーバーに ping を実行し、その結果で JLabel を更新するという長時間実行タスクを実行します。

実装例

次のコードは、これを実装する方法を示しています。アプローチ:

<code class="java">import java.awt.event.*;
import javax.swing.*;

public class PingLabelUpdater {

    public static void main(String[] args) {
        final JLabel label = new JLabel("0000");
        ActionListener timerListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new PingWorker().execute();
            }
        };
        Timer timer = new Timer(1000, timerListener);

        label.setFont(label.getFont().deriveFont(120f));
        JOptionPane.showMessageDialog(null, label, "stackoverflow.com", JOptionPane.INFORMATION_MESSAGE);
        timer.stop();
    }

    static class PingWorker extends SwingWorker {
        int time;
        @Override
        protected Object doInBackground() throws Exception {
            time = pingTime("stackoverflow.com");
            return new Integer(time);
        }
        @Override
        protected void done() {
            label.setText("" + time);
        }
    }

    public static int pingTime(String hostnameOrIP) {
        Socket socket = null;
        long start = System.currentTimeMillis();
        try {
            socket = new Socket(hostnameOrIP, 80);
        } catch (Exception e) {
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (Exception e) {}
            }
        }
        long end = System.currentTimeMillis();
        return (int) (end - start);
    }
}</code>
ログイン後にコピー

この例では、pingTime メソッドは指定されたサーバー (stackoverflow.com) への接続を確立し、それにかかる時間を測定します。 SwingWorker の doInBackground メソッドは ping を実行し、その Done メソッドは ping 時間でラベルを更新します。タイマーは、1000 ミリ秒 (1 秒) の間隔で SwingWorker を実行するように構成されています。

Swing Timer と SwingWorker を組み合わせることで、GUI スレッドをブロックすることなく ping 時間で JLabel を効果的に更新し、ユーザーの応答性を確保します。タスクがバックグラウンドで実行されている間のインターフェイス。

以上がSwingWorker とタイマーを使用して、Java で長時間実行されるタスクの結果で JLabel を更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!