首頁 > Java > java教程 > 如何處理Executor執行SwingWorker任務的例外?

如何處理Executor執行SwingWorker任務的例外?

Linda Hamilton
發布: 2024-12-24 10:58:11
原創
1003 人瀏覽過

How to Handle Exceptions from SwingWorker Tasks Executed by an Executor?

無法從Future 取得ArrayIndexOutOfBoundsException>如果執行緒啟動Executor

問題:

如何捕獲ArrayIndexOutOfBoundsException 或由 SwingWorker 執行的 SwingWorker 任務中的任何例外執行器?

答案:

透過在 SwingWorker 的 did() 方法中重新拋出捕獲的異常。

詳細說明:

使用Executor啟動時SwingWorker 任務,該任務在單獨的執行緒上執行。這表示任務引發的任何異常都不會傳播回 SwingWorker 運行的事件調度執行緒 (EDT)。結果,任務拋出的未捕獲異常將被默默吞掉,done() 方法將正常完成。

要捕獲並處理任務拋出的異常,可以使用以下步驟:
  1. 重寫SwingWorker中的done()方法。
  2. 在done()方法中,使用try-catch阻止捕獲任務可能拋出的任何異常。
  3. 使用 ExecutionException 類別重新拋出捕獲的異常。

透過使用ExecutionException 重新拋出異常,它將被傳播回EDT,並且可以由任務執行時返回的Future 上的get() 方法的調用者處理

範例:

以下程式碼示範如何使用上述步驟擷取和處理Executor執行的 SwingWorker 任務拋出的例外:
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import javax.swing.SwingWorker;

public class TableWithExecutor {

    private static final Executor executor = Executors.newCachedThreadPool();

    public static void main(String[] args) {
        SwingWorker<Void, Void> worker = new SwingWorker<>() {

            @Override
            protected Void doInBackground() throws Exception {
                // Perform some task that may throw an exception
                ...

                // Re-throw any caught exceptions using ExecutionException
                throw new ExecutionException(new Exception("Error occurred in doInBackground()"), null);
            }

            @Override
            protected void done() {
                try {
                    get(); // Will throw the re-thrown ExecutionException
                } catch (ExecutionException e) {
                    // Handle the exception here
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    // Handle the interruption here
                    e.printStackTrace();
                }
            }
        };

        executor.execute(worker);
    }
}
登入後複製

按照以下步驟,您可以捕獲並處理由 SwingWorker 任務執行的異常執行器,確保未捕獲的異常不會被默默地忽視。

以上是如何處理Executor執行SwingWorker任務的例外?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板