在 Java 中實作 SwingWorker
在之前關於從另一個類別重繪的問題中,提到了 SwingWorker 的概念。本文旨在詳細闡述 SwingWorker 的使用,特別是在原始問題中提供的程式碼片段的上下文中。
理解 SwingWorker
SwingWorker 是一個實用程式類別在 Java 中,它有助於在 Swing 應用程式中執行耗時的任務。它允許在單獨的執行緒上執行這些任務,從而防止 GUI 鎖定。
實作 SwingWorker
使用 SwingWorker,這是一個擴展它的新類別應該被建立。在此類中,應實現以下內容:
- doInBackground():此方法包含長時間運行的任務。它在單獨的線程上運行。
- done():當 doInBackground() 方法完成時呼叫此方法。用於處理任務結果並更新GUI。
例如:
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(); } } }</integer>
呼叫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(); } } } }</integer>
以這種方式使用SwingWorker,GUI保持回應,而耗時的任務是後台的eseguito。
以上是SwingWorker 如何提升 Java Swing 應用程式的回應能力?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載
最受歡迎的的開源編輯器