在Java 中使用SwingWorker
簡介
簡介在事件調度上執行的長時間調度運行任務執行緒可以凍結GUI。這個問題可以透過使用 SwingWorker 來解決,它支援在單獨的執行緒上執行此類任務。
處理結果:get 方法可用來在任務完成後擷取結果。這可以在 done 方法中或在啟動 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 用於執行耗時的任務,並在一秒後顯示包含結果的訊息方塊:
以上是SwingWorker 如何防止 Java 中的 GUI 凍結?的詳細內容。更多資訊請關注PHP中文網其他相關文章!