我創建Android應用程序和一些奇怪的行爲正在發生與使用try-finally bock時處理異常有關。奇怪的異常行爲與try-finally塊
爲什麼下面代碼的輸出是NullPointerException
而不是SocketTimeoutException
?
consumeSomeService();
[...]
private void consumeSomeService() {
try {
getResponse();
} catch (SocketTimeoutException ste) {
Log.d("tag", "SocketTimeoutException");
} catch (Exception e) {
Log.d("tag", e.getClass().getName());
}
}
private static void getResponse() throws SocketTimeoutException {
try {
throw new SocketTimeoutException();
} finally {
Log.d("tag", "finally!"); // No matter what is here, always throw NullPointerException
}
}
如果刪除finally
塊,它將按預期工作。
PC /桌面上的這個相同的代碼導致SocketTimeoutException
正確。
編輯:stacktrace,其中「MyActivity.java:38」始終是finally
塊內的最後一行。
java.lang.NullPointerException
at mycompany.exceptiontest.MyActivity.getResponse(MyActivity.java:38)
at mycompany.exceptiontest.MyActivity.consumeSomeService(MyActivity.java:21)
at mycompany.exceptiontest.MyActivity.onCreate(MyActivity.java:16)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
@RichardLeMesurier:我使用的是Android Studio 0.8.9,我已經嘗試過兩種不同的GenyMotion模擬器(API 16和17)。沒有更多的代碼,只是onCreate()。如果從'finally'拋出另一個異常,則調用正確的catch。 – 2014-10-16 14:07:24
使用Android 4.4.2與真正的三星Galaxy Tab 4(SM-T531)進行了測試,結果與錯誤行爲相同。 – 2014-10-30 10:50:14