【发布时间】:2012-05-15 06:22:17
【问题描述】:
我有一个 java 程序,它是 Jasper Reports 的编译器和执行器,通过我们的报告服务器上的 shell 脚本调用。
我刚刚修复了一个由缺少依赖项引起的错误,但我花了一段时间才弄清楚出了什么问题。通常,由编译过程引起的问题会被捕获,记录到日志文件并通过电子邮件发送给相关人员。由于这是一个 NoClassDefFoundError,它基本上退出了程序并从用户的角度以静默方式失败。
有什么方法可以让我捕捉到这样的错误,以便也可以通过电子邮件发送出去?我有权修改正在执行的shell脚本。
【问题讨论】:
-
我对 log4j 进行了一些研究,但据我了解,我认为这行不通。 NoClassDefFoundError 无法在程序内部被捕获以进行记录,因为它会立即强制退出。
-
在你的 start 类的静态 main 方法中,你可以包含一个 try ... catch (Throwable) ... 这将能够处理 noclassdeferror
-
啊,愚蠢的我,抓住 Throwable 是我所追求的......我从来没有使用过比异常更高的级别,所以从来没有真正考虑过。