ホームページ >Java >&#&チュートリアル >SwingWorker はどのようにして Java Swing アプリケーションの応答性を向上させることができますか?
Java での SwingWorker の実装
別のクラスからの再描画に関する以前の質問で、SwingWorker の概念について言及しました。この記事は、特に元の質問で提供されたコード スニペットのコンテキストで、SwingWorker の使用法について詳しく説明することを目的としています。
SwingWorker について
SwingWorker はユーティリティ クラスです。 Java では、Swing アプリケーションでの時間のかかるタスクの実行を容易にします。これにより、これらのタスクを別のスレッドで実行できるようになり、GUI がロックアップするのを防ぐことができます。
SwingWorker の実装
SwingWorker を拡張する新しいクラスを使用するには作成する必要があります。このクラスでは、以下を実装する必要があります:
例:
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 サイトの他の関連記事を参照してください。