在 Java 中使用 SwingWorker
简介
在事件调度上执行的长时间运行任务线程可以冻结 GUI。这个问题可以通过使用 SwingWorker 来解决,它支持在单独的线程上执行此类任务。
如何使用 SwingWorker
示例
在此示例中,SwingWorker 用于执行一项耗时的任务,并在一秒后显示包含结果的消息框:
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中文网其他相关文章!