【问题标题】:Java: Show crashes in GUI, but suppress warningsJava:在 GUI 中显示崩溃,但禁止显示警告
【发布时间】:2010-02-03 08:43:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: java stderr standard-error


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-05
        • 1970-01-01
        • 2013-10-18
        • 2020-11-15
        • 2012-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多