java 中运行时可触发的异常是否有限制?

Is there a limit for exceptions fireable at runtime in java?

我有一个方法,基本上是一个循环(具有所有适当的捕获条件),其中退出条件是正在关闭的框架。这种方法做一些需要互联网连接的事情。如果没有互联网连接,它将递归调用自身,直到互联网连接恢复。我注意到在触发一定数量的异常后,它会简单地停止以递归方式调用该方法,因此之后不会触发任何异常。运行时可触发的异常是否有限制?

public Download()
{
    try {
            while(!frame.isWindowClosed())
            {
                //doSomething
            }
        } catch (FailingHttpStatusCodeException e) {
            e.printStackTrace();
            textArea.append("****** FailingHttpStatusCodeException ******\n");
            new Download();
        } catch (MalformedURLException e) {
            e.printStackTrace();
            textArea.append("****** MalformedURLException ******\n");
            new Download();
        } catch (IOException e) {
            e.printStackTrace();
            textArea.append("****** IOException ******\n");
            new Download();
        } catch (Exception e) {
            e.printStackTrace();
            textArea.append("****** Exception ******\n");
            new Download();
        }
}

我认为最好将循环放在构造函数之外的方法中。然后从构造函数中调用该方法。

我认为你应该做的是有一个机制来检查是否有网络连接..然后如果有连接则执行所需的操作。如果没有互联网连接,则继续。当然,您必须将其包装在一个 while 循环中

在循环中设置try,只要框架没有关闭,循环就会继续。如果所有异常的 catch 块都相同,您可以只捕获最高的异常:

public Download() {
    while (!frame.isWindowClosed()) {
        try {
            // doSomething
        } catch (Exception e) {
            e.printStackTrace();
            textArea.append("****** "+e.getClass().getName()+" ******\n");
        }
    }
}

只要 doSomething() 没有成功关闭框架,while 循环就会重试。