無法從Future 取得ArrayIndexOutOfBoundsException>如果執行緒啟動Executor
問題:
如何捕獲ArrayIndexOutOfBoundsException 或由 SwingWorker 執行的 SwingWorker 任務中的任何例外執行器?答案:
透過在 SwingWorker 的 did() 方法中重新拋出捕獲的異常。詳細說明:
使用Executor啟動時SwingWorker 任務,該任務在單獨的執行緒上執行。這表示任務引發的任何異常都不會傳播回 SwingWorker 運行的事件調度執行緒 (EDT)。結果,任務拋出的未捕獲異常將被默默吞掉,done() 方法將正常完成。 要捕獲並處理任務拋出的異常,可以使用以下步驟:範例:
以下程式碼示範如何使用上述步驟擷取和處理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); } }
以上是如何處理Executor執行SwingWorker任務的例外?的詳細內容。更多資訊請關注PHP中文網其他相關文章!