0

我想知道是否有一种方法可以在抛出某个异常时得到通知,即使它已经被捕获。

我有一个异常被引发异常的底层框架捕获。我一直试图从他们的 try-catch 之外(基本上围绕它)使用这个异常作为触发点来运行一些代码并试图找到一种方法来做到这一点。

有什么办法吗?

谢谢!

4

3 回答 3

4

你没有给出上下文,所以这里有一些可能性:

  • 在适当的构造函数中设置断点并在调试模式下运行
  • 使用方面,例如 aspectj 或 spring
  • 把你的扩展放在异常的构造函数中
  • 在导致异常的代码周围放置一个 try-catch

PS:对于您不知道的情况,您可以RuntimeExceptions像捕获已检查的异常一样捕获。

于 2012-10-01T20:38:29.533 回答
0

据我了解,您无法访问源代码,异常在您的访问范围之外被捕获和处理,您想让它做点什么吗?

唯一对我来说显而易见的解决方案是 PowerMock,一个库允许您覆盖构造函数并返回您自己创建的对象。它通常仅用于测试,我不鼓励将其用于任何其他目的,但您可以使用它来替换该异常的所有实例,并使用原始异常的扩展,并添加您自己的代码。

于 2012-10-01T20:42:44.180 回答
0

如果框架已经捕获了异常,则无法使用 try-catch 块捕获它。

您正在尝试这样做:

try {
    try {
        throw new Exception();
    } catch(Exception e) {
        e.printStackTrace();
    }
} catch(Exception e) {
    System.out.println("Caught from the outside!");
}

这将失败,将打印异常的 StackTrace,但“从外部捕获!” 不会被打印。这是因为中间抛出的异常已经被捕获,异常不能被捕获两次,否则会破坏错误处理的目的;一旦处理了错误,无需通知更高级别;)

于 2012-10-01T20:38:40.123 回答