Java での SwingWorker の使用
概要
Event Dispatch で実行される長時間実行タスクスレッドにより GUI がフリーズする可能性があります。この問題は、別のスレッドでのそのようなタスクの実行をサポートする SwingWorker を使用することで解決できます。
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 サイトの他の関連記事を参照してください。