izb*_*izb 4 java exception try-catch java-wireless-toolkit java-me
我有一个线程,我在一个大的,无所不包的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] */
}
}
Run Code Online (Sandbox Code Playgroud)
我希望NPE能被Throwable catch块捕获.相反,不打印[2]处的输出,也不打印[3].打印[1]处的输出.
我在控制台上得到的是:
Uncaught exception java/lang/NullPointerException.
Run Code Online (Sandbox Code Playgroud)
这到底是怎么回事?
对于法庭记录,我正在使用J2ME,这是在Sun的WTK v2.5.2模拟器中运行的.
我很想把它归结为JVM实现的笨拙,但我不禁觉得我只是错过了一些东西.
澄清是为了避免怀疑(因为示例代码明显改变了我的生产代码)
答案结果证明我是个白痴.我会解释出了什么问题,但让我们把它称为"其中一个错误".
我暂时忘记了运行runnable的线程是一个自定义线程类(绕过一些诺基亚漏洞).它run()在调用canWait()方法之间反复调用.
canWait方法导致失败,并且运行根本没有失败.最重要的是,我有控制台失明,完全但不小心错误地引用了我的问题中的事件序列.
听起来你需要一些试验和错误.我可以建议:
try {
doEvilStuff();
} catch (NullPointerException ex) {
System.out.println("NPE encountered in body");
} catch (Throwable ex) {
System.out.println("Regular Throwable: " + ex.getMessage());
} finally {
etc...
}
Run Code Online (Sandbox Code Playgroud)
通过对NullPointerException进行显式捕获,如果异常来自try块或catch/finally块,则应该很明显.
| 归档时间: |
|
| 查看次数: |
14808 次 |
| 最近记录: |