Java で効率的な GUI タスク管理のために Swing Timer と SwingWorker を使用する方法

Mary-Kate Olsen
リリース: 2024-10-24 05:31:30
オリジナル
476 人が閲覧しました

How to Use Swing Timer and SwingWorker for Efficient GUI Task Management in Java?

GUI での繰り返しおよび長時間実行タスクのための Swing Timer と SwingWorker の使用

グラフィカル ユーザー インターフェイス (GUI) で、アプリケーションの応答性は非常に重要です。ネットワーク呼び出しや負荷の高い計算など、長時間実行または反復的なタスクを実行すると、適切に処理されないと UI がフリーズする可能性があります。

反復タスク用のスイング タイマー

タスクの場合一定の間隔で繰り返す必要がある場合 (サーバーからのデータでラベルを更新する場合など)、Swing は Timer クラスを提供します。タイマーには遅延と、タイマーがトリガーされたときに実行するアクションを定義する ActionListener を設定できます。

長時間実行タスク用の SwingWorker

SwingWorker は Swing SwingUtilities を拡張するコンポーネントであり、長時間かかるタスク向けに設計されています。これにより、UI の応答性を維持しながら、バックグラウンド スレッドでタスクを実行できます。タスクが完了すると、SwingWorker は、結果で UI を更新するようにメイン スレッドに通知します。

例: サーバー Ping 結果によるラベルの更新

Timer と SwingWorker を組み合わせて使用​​する場合は、次のコード スニペットを検討してください。

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

public class LabelUpdateExample {

    private static String hostnameOrIP = "stackoverflow.com";
    private static int delay = 5000;
    private static JLabel label = new JLabel("0000");

    public static void main(String[] args) {
        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();
    }

    private static class PingWorker extends SwingWorker {

        private int time;

        @Override
        protected Object doInBackground() throws Exception {
            time = pingTime();
            return new Integer(time);
        }

        @Override
        protected void done() {
            label.setText("" + time);
        }
    }

    private 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);
    }
}</code>
ログイン後にコピー

このコードは、指定されたホストへの ping 時間を表示する JLabel を作成し、タイマーを使用して 5 秒ごとに更新します。 UI のフリーズを避けるために、ping 操作はバックグラウンド スレッド utilizando SwingWorker で実行されます。 ping が完了すると、SwingWorker はその結果でラベルを更新し、長時間実行されているタスクでも GUI の応答性を維持します。

以上がJava で効率的な GUI タスク管理のために Swing Timer と SwingWorker を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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