在 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保持回應,而耗時的任務是後台的eseguito。
以上是SwingWorker 如何提升 Java Swing 應用程式的回應能力?的詳細內容。更多資訊請關注PHP中文網其他相關文章!