在月球着陆器示例中,如果我将以下两行添加到doDraw方法的顶部,则应用程序会立即崩溃并出现NullPointerException:
Matrix m = canvas.getMatrix(); canvas.setMatrix( null );
堆栈跟踪是:
FATAL EXCEPTION: Thread-8 java.lang.NullPointerException at android.graphics.Matrix.preConcat(Matrix.java:233) at android.view.Surface$CompatibleCanvas.setMatrix(Surface.java:259) at com.example.android.lunarlander.LunarView$LunarThread.doDraw(LunarView.java:617) at com.example.android.lunarlander.LunarView$LunarThread.run(LunarView.java:360)
setMatrix的画布文档指出If the matrix parameter is null, then the current matrix is reset to identity
,因此没有理由这会崩溃。
另外,如果我在调用setMatrix(null)之前不调用getMatrix,则setMatrix(null)成功。所以不知何故,这是导致问题的两个调用的组合。
这是怎么回事?!