私は大きな、包括的なキャッチブロックのすべてのエラーをキャッチするスレッドを持っています。私はこれを実行して、私のアプリケーションで予期されたエラーだけでなくエラーを報告することができます。 My Runnableは次のようになります。NullPointerExceptionがキャッチブロックにキャッチされないのはなぜですか?
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キャッチブロックによって捕捉されることが予想されます。代わりに、[2]の出力は印刷されず、[3]も出力されません。 [1]の出力が印刷されます。私は、コンソール上で入手できますか何
は、この次のとおりです。地球上の
Uncaught exception java/lang/NullPointerException.
ここで何が起こっているの?
私はJ2MEを使用していますが、これはSunのWTK v2.5.2エミュレータで実行されています。
私はそれをJVM実装ドッジネスにすることを嫌いますが、私は何かが欠けていると感じるのを助けることができません。 (例えば、コードは明らかに私の生産コードから変更されているので)runメソッドにブロックし、最後に/何ものtry/catchの外ではありません疑いを回避するために
- を明確にするために
。
- これらのブロックの先頭にはSystem.out.printlnがあります。これらのコンソールステートメントに続くものは重要ではありません。
[1]の出力は表示されていますか? –
はい、[1]が表示されます。 – izb
ああ、あなたのサインをすることはできますか、Mr. Skeet? :P – izb