Java:在GUI中显示崩溃,但禁止警告

时间:2010-02-03 08:43:20

标签: java stderr standard-error

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以安装自己的异常处理程序。这里解释了Swing的一种技术:http://ruben42.wordpress.com/2009/03/30/catching-all-runtime-exceptions-in-swing/。 Eric Burke也有nice article on this topic。另一种通用技术是使用Thread.setDefaultUncaughtExceptionHandler,当线程因异常而死时调用(根据第一篇引用文章中的注释,Swing线程不会死,因此设置未捕获的异常处理程序不适用于Swing,但是Eric的文章使用了这种技术。)

然后,您的异常处理程序可以显示错误,记录错误或执行任何操作,而无需使用标准输出/错误流来处理其他代码。

答案 1 :(得分:2)

我认为你是从错误的角度来解决这个问题。当存在异常时,您应该弹出一个对话框,而不仅仅是在输出到System.err时。 System.err更像是一个日志实用程序。

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

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