2015-03-19 197 views
1

我正在使用canvas.drawBitmap方法。這是因爲應用程序在隨機發生時拋出nullpointerexceptions。有沒有一種方法來實現它,這樣繪圖就能正確渲染? 我正在創建一個由單元組成的板子。單元格包含圖像應該在的位置的像素座標。但如上所述,並非所有圖像都顯示出來。 我收到一條錯誤消息,具體是canvas.drawBitmap(bitmap, srcRect, dstRect, paint)當我實現canvas.drawBitmap方法時,如何避免內存泄漏?

錯誤:

03-18 13:46:21.615 22880-22932/com.example.sam.matrix E/AndroidRuntime﹕ FATAL EXCEPTION: Game Thread 
    Process: com.example.sam.matrix, PID: 22880 
    java.lang.NullPointerException 
      at com.example.sam.matrix.framework.util.Painter.drawImage(Painter.java:54) 
      at com.example.sam.matrix.game.state.PlayState.renderCell(PlayState.java:74) 
      at com.example.sam.matrix.game.state.PlayState.renderBoard(PlayState.java:48) 
      at com.example.sam.matrix.game.state.PlayState.render(PlayState.java:38) 
      at com.example.sam.matrix.main.GameView.updateAndRender(GameView.java:109) 
      at com.example.sam.matrix.main.GameView.run(GameView.java:130) 
      at java.lang.Thread.run(Thread.java:841) 
+1

你在哪裏初始化'canvas'在canvas.drawBitmap(bitmap,null,dstRect,paint);'? – iRuth 2015-03-19 05:23:35

+0

在我的Painter類中,作爲公共類Painter {private} Canvas canvas; – jssmkp 2015-03-19 05:24:44

+1

你在哪裏**初始化**'canvas'?這個 - >'private Canvas canvas;'是'canvas'的**聲明**,而不是它的**初始化**。你應該尋找像'canvas = new Canvas();' – iRuth 2015-03-19 05:27:33

回答

1

我建議你調試這條線 - >canvas.drawBitmap(bitmap, null, dstRect, paint);要弄清楚什麼是空的。我可以看到你初始化了dstRectpaint,所以我不認爲這些會有空指針問題。要調試它,你可以這樣做:

if (canvas == null) { 
    Log.i("canvas", "canvas is null"); 
} 

if (bitmap == null) { 
    Log.i("bitmap", "bitmap is null"); 
} 

canvas.drawBitmap(bitmap, null, dstRect, paint); 

這應該告訴你是什麼導致空指針異常。

讓我知道這是否有幫助。