【发布时间】:2009-04-22 11:32:07
【问题描述】:
我有一个线程,我在一个大的、包罗万象的 catch 块中捕获所有错误。我这样做是为了在我的应用程序中报告任何错误,而不仅仅是预期的错误。我的 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 块捕获。相反,[2] 处的输出不打印,[3] 也不打印。打印 [1] 处的输出。
我在控制台上得到的是这样的:
Uncaught exception java/lang/NullPointerException.
这到底是怎么回事?
对于法庭记录,我使用的是 J2ME,它在 Sun 的 WTK v2.5.2 模拟器中运行。
我很想把它归结为 JVM 实现的狡猾,但我不禁觉得我只是错过了一些东西。
为了避免疑问而澄清(因为示例代码显然是从我的生产代码中改变的)
- run 方法中的 try/catch/finally 块之外没有任何内容。
- 每个块的开头都有一个 System.out.println - 这些控制台语句后面的内容无关紧要。
【问题讨论】:
-
是否显示[1]处的输出?
-
哦,斯基特先生,我可以要你的签名吗? :P
标签: java exception java-me try-catch java-wireless-toolkit