【问题标题】:Catching Throwable in Blackberry Java: Good Idea?在 Blackberry Java 中捕获 Throwable:好主意?
【发布时间】:2011-03-10 23:24:10
【问题描述】:

我经常在 Blackberry 文档中看到 Throwable 的 catch 子句,例如 Network API docs。我的感觉是,这在 Java 中通常不是一个好的做法。

在黑莓编程中有这样的原因吗?

这是否与 Throwables 的 stack trace generation 有关?

【问题讨论】:

    标签: blackberry java-me try-catch throwable


    【解决方案1】:

    当您在 BlackBerry 应用程序中捕获 Throwable 时,它​​不仅会保留堆栈跟踪,还会将该堆栈跟踪保存在设备事件日志中。 There is no way for an app to get a stack trace itself,所以很遗憾你不能自动收集堆栈跟踪。

    要查看堆栈跟踪,请打开事件日志查看器。对于带有物理键盘的黑莓,按住“Alt”,然后按 L G L G 以调出事件日志。

    【讨论】:

    • 那么这是一个纯粹的面向开发(相对于生产)的措施吗?
    【解决方案2】:

    阅读 java.lang.Error 的文档,它是 Throwable 的子类,您会发现捕获 Throwable 的问题。

    上面写着:

    错误是 Throwable 的子类 这表明严重的问题,一个合理的应用 不应该试图抓住。

    例如,您最终可能会无意中捕获 VirtualMachineError,指示整个 VM 处于损坏状态。将一些东西放在 finally 块中以在损坏的 VM 上运行似乎不是一个好主意。

    【讨论】:

    • 我想知道他们为什么建议这样做呢?我猜他们被误导了。
    • 我相信评论意味着您不应该尝试对错误或子类型 NoClassDefFoundError、VirtualMachineError、FactoryConfigurationError、CryptoSelfTestError 进行特殊处理。这并不排除记录或其他通用处理以通知您的应用出现问题。
    【解决方案3】:

    我不认为有什么特别的原因。见评论:

    } catch (Throwable t) { // 也可以捕获特定异常以包含针对不同类型的特殊hadling

    这意味着示例是基本的。并且有一个错字和一个不好的做法。因此,如果可能,请捕获特定异常。

    【讨论】:

    • 我认为这个故事还有更多内容,因为 Throwable 似乎无处不在。
    • Catching Throwable 对于生产应用程序来说是个坏主意(请参阅我对 orig q 的回复),但对于测试、原型和其他非面向客户的东西,它可能是合适的。
    【解决方案4】:

    在 BB 平台上,如果 Throwable 被捕获,它会保留堆栈跟踪并通常将其呈现在屏幕上,在用户面前爆炸。对用户体验不太好:(

    当捕获到异常(和扩展类)时,出于效率原因,堆栈跟踪将被丢弃。

    【讨论】:

    • 我是 OS 4.5 到 6.0 的 BlackBerry 开发人员,我可以告诉您它不会在屏幕上呈现堆栈跟踪。不知道你是从哪里得到这个想法的。
    • 它可能不会一直发生,但我已经看到它发生得足够多,以至于我避免捕获 Throwable。众所周知,BB OS 会导致您似乎没有要求的 UI 效果。前任。我已经看到 MDS 连接中与 BES 相关的 SSL 错误实际上会导致设备端弹出窗口。 p.s.从 4.1 开始我一直在研究 BB
    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多