java - 为什么我的 NullPointerException 没有在我的 catch block 中被捕获?

标签 java exception java-me try-catch java-wireless-toolkit

我有一个线程,在这个线程中,我在一个包罗万象的大 catch block 中捕获所有错误。我这样做是为了报告我的应用程序中的任何错误,而不仅仅是预期的错误。我的 Runnable 看起来像这样:

public final void run()
{
    try
    {
        System.out.println("Do things"); /* [1] */

        doUnsafeThings();
    }
    catch (Throwable t)
    {
        System.out.println("Catch"); /* [2] */

        recover();
    }
    finally
    {
        System.out.println("Finally"); /* [3] */
    }
}

我希望 NPE 被 Throwable catch block 捕获。相反,[2] 处的输出未打印,[3] 也未打印。打印 [1] 处的输出。

我在控制台上得到的是:

Uncaught exception java/lang/NullPointerException.

这到底是怎么回事?

对于法庭记录,我使用的是 J2ME,它在 Sun 的 WTK v2.5.2 模拟器中运行。

我很想把它归结为 JVM 实现的狡猾,但我忍不住觉得我只是错过了一些东西。

为避免疑惑澄清(因为示例代码显然是从我的生产代码中更改的)

  • run 方法中的 try/catch/finally block 之外没有任何内容。
  • 在每个 block 的开头都有一个 System.out.println - 这些控制台语句后面的内容无关紧要。

最佳答案

答案证明我是个白痴。我会解释哪里出了问题,但我们只称它为“其中一个错误”。

我暂时忘记了运行 runnable 的线程是一个自定义线程类(为了避免一些诺基亚错误)。它在调用 canWait() 方法之间重复调用 run()

canWait 方法是导致失败的原因,而 run 根本没有失败。最重要的是,我对控制台视而不见,完全但不小心错误地引用了我问题中的事件顺序。

关于java - 为什么我的 NullPointerException 没有在我的 catch block 中被捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/776765/

相关文章:

java - AssertionError 的 getMessage() 奇怪地为 null

python - 在 Python 中捕获所有异常是个坏主意

java - MATLAB的interp1函数在J2ME中的实现

java - OptaPlanner:使规划实体链接起来并且可以为空

java - 使用类似的 Java 接口(interface)

java - 如何在jquery ajax脚本中转换为所需的日期格式

java - 将 OBJ 模型加载到 M3G 中

java - 将一个 DefaultStyledDocument 插入另一个 DefaultStyledDocument

java - 为什么我在线程 "AWT-EventQueue-0"java.lang.ArrayIndexOutOfBoundsException : 2? 中收到异常

java-me - 电脑与手机蓝牙客户端/服务器通讯