首页 >Java >java教程 >如何在 SwingWorker 和 Executor 线程中捕获 ArrayIndexOutOfBoundsException?

如何在 SwingWorker 和 Executor 线程中捕获 ArrayIndexOutOfBoundsException?

Patricia Arquette
Patricia Arquette原创
2024-12-19 20:08:10169浏览

How to Catch ArrayIndexOutOfBoundsException in SwingWorker and Executor Threads?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn