ホームページ > Java > &#&チュートリアル > SwingWorker は Java での GUI フリーズをどのように防ぐことができますか?

SwingWorker は Java での GUI フリーズをどのように防ぐことができますか?

Susan Sarandon
リリース: 2024-12-22 15:38:14
オリジナル
521 人が閲覧しました

How Can SwingWorker Prevent GUI Freezes in Java?

Java での SwingWorker の使用

概要

Event Dispatch で実行される長時間実行タスクスレッドにより GUI がフリーズする可能性があります。この問題は、別のスレッドでのそのようなタスクの実行をサポートする SwingWorker を使用することで解決できます。

SwingWorker の使用方法

  1. 定義SwingWorker のサブクラス: サブクラスは、長時間実行タスクが実行される doInBackground メソッドを定義する必要があります。
  2. SwingWorker を実行する:execute メソッドは、別のスレッドで SwingWorker を開始するために使用されます。これをボタンのクリックなどのイベントにリンクできます。
  3. 結果の処理: get メソッドを使用して、タスクの終了後にタスクの結果を取得できます。これは、done メソッドまたは SwingWorker を開始したイベント ハンドラーで実行できます。

Example

この例では、SwingWorker を使用して実行します。時間のかかるタスクを実行し、1 秒後に結果を示すメッセージ ボックスを表示します:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SwingWorkerExample {

    private static void makeGUI() {
        final JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new FlowLayout());

        class AnswerWorker extends SwingWorker<Integer, Integer> {
            protected Integer doInBackground() throws Exception {
                Thread.sleep(1000);
                return 42;
            }

            protected void done() {
                JOptionPane.showMessageDialog(f, get());
            }
        }

        JButton b = new JButton("Answer!");
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new AnswerWorker().execute();
            }
        });

        f.getContentPane().add(b);
        f.getContentPane().add(new JButton("Nothing"));
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(SwingWorkerExample::makeGUI);
    }
}
ログイン後にコピー

以上がSwingWorker は Java での GUI フリーズをどのように防ぐことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート