1

对于桌面应用程序,当程序崩溃时,在 GUI 上查看堆栈跟踪很有用。我通过用我自己的错误处理程序替换 System.err 在 Java 中实现了这一点,它将所有错误消息重定向到一个 GUI 组件和一个文本文件。

问题:相当多的库(例如 Apache POI)在发生崩溃时不仅会写入 System.err,它们还会输出简单的警告消息。这会导致崩溃窗口不必要地弹出。所以我的问题是,是否有人知道如何(1)在程序崩溃时显示堆栈跟踪,而(2)在出现警告消息时不显示它?

[编辑] 我的 GUI 是用 SWT 编写的。

4

2 回答 2

2

您可以安装自己的异常处理程序。此处解释了 Swing 的一种技术:http ://ruben42.wordpress.com/2009/03/30/ catch-all-runtime-exceptions-in-swing/ 。Eric Burke 也有关于这个主题的好文章。另一种通用技术是 using Thread.setDefaultUncaughtExceptionHandler,当线程因异常而死时调用(根据第一篇引用文章中的评论,Swing 线程不会死,因此设置未捕获的异常处理程序对 Swing 不起作用,但 Eric 的文章使用了这种技术)。

然后,您的异常处理程序可以显示错误、记录错误或做任何您想做的事情,而无需关心使用标准输出/错误流的其他代码。

于 2010-02-03T08:47:50.563 回答
2

我认为您从错误的角度解决问题。您应该在出现异常时弹出一个对话框,而不仅仅是在输出到 System.err 时。System.err 更像是一个日志工具。

对于所有检查的异常,您应该在代码中逐个处理它们。弹出一个对话框,记录它们,或者忽略它们(但在这种情况下,请确保这样做真的很安全)

要捕获任何剩余的未经检查的异常,您可以执行以下操作:http://www.javaspecialists.eu/archive/Issue081.html,以确保您得到这些。

于 2010-02-03T08:51:25.580 回答