对于桌面应用程序,在程序崩溃时查看 GUI 上的堆栈跟踪很有用。我通过用我自己的错误处理程序替换 System.err 在 Java 中实现了这一点,它将所有错误消息重定向到一个 GUI 组件和一个文本文件。
问题:相当多的库(例如 Apache POI)不仅在发生崩溃时写入 System.err,它们还会输出简单的警告消息。这会导致崩溃窗口不必要地弹出。 所以我的问题是,有人知道如何 (1) 在程序崩溃时显示堆栈跟踪,而 (2) 在出现警告消息时不显示它吗?
[编辑] 我的 GUI 是用 SWT 编写的。
最佳答案
您可以安装自己的异常处理程序。此处解释了一种 Swing 技术:http://ruben42.wordpress.com/2009/03/30/catching-all-runtime-exceptions-in-swing/ .埃里克伯克也有 nice article on this topic .另一种通用技术是使用 Thread.setDefaultUncaughtExceptionHandler
,当线程因异常而死亡时调用(根据第一篇引用文章中的评论,Swing 线程不会死亡,因此设置未捕获的异常处理程序对 Swing 不起作用,但 Eric 的文章使用了此技术)。
然后您的异常处理程序可以显示错误、记录错误或执行任何您想要的操作,而无需关心使用标准输出/错误流的其他代码。
关于Java:在 GUI 中显示崩溃,但禁止显示警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190650/