在Java中引发某个异常时的通知

时间:2012-10-01 20:32:32

标签: java exception frameworks

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

我有一个异常,它被抛出异常的底层框架捕获。我一直试图从他们的try-catch(本质上包围它)之外的这个异常作为触发点来运行一些代码并试图找到一种方法来实现它。

有什么办法吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

你没有给出任何背景,所以这里有一些可能性:

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

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

答案 1 :(得分:0)

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

你正试图这样做:

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

哪个会失败,会打印出例外的StackTrace,但是“从外面抓到了!”将不会被打印。这是因为中间抛出的异常已经被捕获,异常不能被捕获两次,或者这会破坏错误处理的目的;处理完错误后,无需通知更高级别;)

答案 2 :(得分:0)

根据我的理解,您无法访问源代码,异常会在您的访问范围之外被捕获和处理,并且您想让它做某事吗?

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