ホームページ > Java > &#&チュートリアル > SwingWorker はどのようにして Java Swing アプリケーションの応答性を向上させることができますか?

SwingWorker はどのようにして Java Swing アプリケーションの応答性を向上させることができますか?

Patricia Arquette
リリース: 2024-12-06 07:57:13
オリジナル
907 人が閲覧しました

How can SwingWorker Improve Responsiveness in Java Swing Applications?

Java での SwingWorker の実装

別のクラスからの再描画に関する以前の質問で、SwingWorker の概念について言及しました。この記事は、特に元の質問で提供されたコード スニペットのコンテキストで、SwingWorker の使用法について詳しく説明することを目的としています。

SwingWorker について

SwingWorker はユーティリティ クラスです。 Java では、Swing アプリケーションでの時間のかかるタスクの実行を容易にします。これにより、これらのタスクを別のスレッドで実行できるようになり、GUI がロックアップするのを防ぐことができます。

SwingWorker の実装

SwingWorker を拡張する新しいクラスを使用するには作成する必要があります。このクラスでは、以下を実装する必要があります:

  1. doInBackground(): このメソッドには、長時間実行されるタスクが含まれています。別のスレッドで実行されます。
  2. done(): このメソッドは、doInBackground() メソッドが完了すると呼び出されます。これは、タスクの結果を処理し、GUI を更新するために使用されます。

例:

class AnswerWorker extends SwingWorker<Integer, Integer> {

    @Override
    protected Integer doInBackground() throws Exception {
        // Perform a time-consuming task here.
        Thread.sleep(1000);
        return 42;
    }

    @Override
    protected void done() {
        try {
            // Display the result of the task in a message box.
            JOptionPane.showMessageDialog(f, get());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

SwingWorker の呼び出し

SwingWorker を呼び出すには、そのexecute() メソッドを呼び出します。通常、これは ActionListener などのイベント ハンドラーから実行できます。

JButton b = new JButton("Answer!");
b.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        new AnswerWorker().execute();
    }
});
ログイン後にコピー

例:

次のコードは、単純なコードでの SwingWorker の使用を示しています。 GUI アプリケーション:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;

public class SwingWorkerExample {

    public static void main(String[] args) {
        makeGUI();
    }

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

        // Create and invoke SwingWorker.
        JButton answerButton = new JButton("Answer!");
        answerButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new AnswerWorker().execute();
            }
        });

        f.getContentPane().add(answerButton);
        f.pack();
        f.setVisible(true);
    }

    private static class AnswerWorker extends SwingWorker<Integer, Integer> {

        @Override
        protected Integer doInBackground() throws Exception {
            // Perform a time-consuming task.
            Thread.sleep(1000);
            return 42;
        }

        @Override
        protected void done() {
            try {
                // Display the result of the task in a message box.
                JOptionPane.showMessageDialog(f, get());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
ログイン後にコピー

このように SwingWorker を使用すると、GUI が残ります時間のかかるタスクがバックグラウンドで実行されている間、応答性は高くなります。

以上がSwingWorker はどのようにして Java Swing アプリケーションの応答性を向上させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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