BlackBerry - 全局异常处理程序

时间:2011-05-23 11:44:34

标签: blackberry exception-handling

(编辑:这个问题特别关于BB,因为它优化异常的奇怪方式。我对J2SE中的正常异常处理模式感到满意,但BB不按照正常情况运行。特别是在这种情况下,BB丢弃了错误类型和消息,以及BB开发者如何尝试处理此问题,或者他们是否忽略它。)

我想在我的BB应用程序中实现某种形式的自定义全局错误处理。特别是尝试处理我的代码未捕获的任何其他异常,因为我没有预料到它们。默认行为是应用程序失败,并弹出一个对话框,说明发生了未知错误。

我想更好地描述错误,因此我的术语是“全局错误处理程序”。与代码类似的东西:

public static void main(String[] args)
{
    try
    {

        FusionApp app = FusionApp.getInstance();
        app.enterEventDispatcher();

    }
    catch (Throwable t)
    {
        // t has lost all type information at this point - this prints "null"
        System.err.println(t.getMessage());
    }
}

我当前的问题是,当我抓住t时(在main()调用之后的app.enterEventDispatcher()方法中),它已丢失其类型信息。例如我知道代码会抛出一个带有自定义消息的IllegalArgumentException - 但是在catch块中,它是带有java.lang.Error消息的null

在堆栈跟踪(ALT LGLG)中,消息也已丢失(至少堆栈跟踪是准确的)。

那么......在BB上实现某种形式的全局错误处理有什么好的模式?或者这在这个平台上被认为是个坏主意?

只是弹出未知错误对话框是不错的做法 - 我不喜欢这个,但也许这就是BB的方式?

1 个答案:

答案 0 :(得分:0)

最佳做法是实现自定义异常处理。

所以,如果你希望捕获IllegalArgumentException,MyCustomException和StartupException,先将它们放入catch块,然后放入一个Exception catch(然后,如果你愿意的话,放一个Throwable catch)

共同规则是 - 从最独特到最常见,以及同一级别的例外 - 从最期望到最不期望。

如果异常== null或getMessage()== null,您总是可以显示“应用程序错误,请将事件日志发送到[支持电子邮件]”消息,然后如果您有一个很好的事件登录到您的应用程序,你很有可能重现一个问题。

谈论事件日志,请参阅EventLogger类以实现日志记录。