Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导致异常的多个Java根本原因_Java_Exception_Exception Handling - Fatal编程技术网

导致异常的多个Java根本原因

导致异常的多个Java根本原因,java,exception,exception-handling,Java,Exception,Exception Handling,我有一个有趣的场景,我在catch子句中设置了一个HttpServletResponse错误。“response.sendError(…)”也会引发异常。在异常处理期间处理异常以保留原始异常详细信息的最佳方法是什么 我有这样的想法: try { ... } catch(Exception e) { try { response.sendError(500); } catch(IOException e2) { //Can I do something like

我有一个有趣的场景,我在catch子句中设置了一个HttpServletResponse错误。“response.sendError(…)”也会引发异常。在异常处理期间处理异常以保留原始异常详细信息的最佳方法是什么

我有这样的想法:

try {
...
} catch(Exception e) {
  try {
      response.sendError(500);
    } catch(IOException e2) {
      //Can I do something like:
      //'throw new ServletException(e,e2)' here?
    }
}
换句话说,将两个异常中的信息捆绑到下一个抛出的异常中的最佳方法是什么?我不想在处理第二个异常时丢失第一个异常的信息

通常,多个try-catch块对于可读性来说似乎很糟糕。我希望避免这种混乱。始终可以将嵌入的try/catch捆绑到一个方法中。。。但仍然很糟糕,无法解决保留所有异常详细信息的问题。

尝试:

try {
...
} catch(Exception e) {
  try {
      response.sendError(500);
    } catch(IOException e2) {
      e2.initCause(e);
      throw e2;
    }
}
如果异常已经有原因,则使用
initCause()
将不会起作用。相反,您可以使用
addsuppressed()
将异常包含在不同异常的堆栈跟踪中

try {
...
} catch(Exception e) {
  try {
      response.sendError(500);
    } catch(IOException e2) {
      e.addSuppressed(e2);
      throw e;
    }
}

谢谢-我不知道这是可能的。。。如果你正在处理一个已经有根本原因的异常,我想你是运气不好。不过,对于这种情况应该可以。我认为您可以创建更多异常并将它们链接起来。如果原因已设置为
e2
,您将如何处理?这有点棘手。在示例代码中,
e2.initCause(e)将引发异常。