SwingWorker 和 Executor 中 ArrayIndexOutOfBoundsException 的问题
问题描述
使用 Executor 和 SwingWorker 进行多线程操作时,题主遇到了一个 ArrayIndexOutOfBoundsException,但当代码中注释掉会导致异常的语句后,异常却没有再出现。题主希望了解如何捕获这样的异常。
答案
为了捕获 ArrayIndexOutOfBoundsException,可以在 SwingWorker 的 done() 方法中从 Future#get() 中重新抛出该异常。
@Override protected void done() { try { get(); } catch (InterruptedException | ExecutionException ie) { ie.printStackTrace(); } catch (IllegalStateException is) { is.printStackTrace(); } }
修改后的代码片段
// ... @Override protected void done() { if (str.equals("StartShedule")) { try { get(); } catch (InterruptedException | ExecutionException ie) { ie.printStackTrace(); } catch (IllegalStateException is) { is.printStackTrace(); } } }
完整代码
完整代码如下:
// ... @Override protected void done() { if (str.equals("StartShedule")) { try { get(); } catch (InterruptedException | ExecutionException ie) { ie.printStackTrace(); } catch (IllegalStateException is) { is.printStackTrace(); } } } // ...
使用此修改后,即使未注释掉导致异常的代码,也能捕获到 ArrayIndexOutOfBoundsException。
以上是如何在 SwingWorker 和 Executor 线程中捕获 ArrayIndexOutOfBoundsException?的详细内容。更多信息请关注PHP中文网其他相关文章!