2015-03-19 2 views
1

Я использую метод canvas.drawBitmap совсем немного. И это заставляет приложение бросать nullpointer excceptions в случайных случаях. Есть ли способ реализовать его, чтобы рисунок правильно отображался? Я создаю доску, которая состоит из ячеек. И клетки координируют пиксельные координаты, где должно быть изображение. Однако, как упоминалось выше, не все изображения отображаются. У меня есть ошибка, особенно на 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.drawBitmap (bitmap, null, dstRect, paint); '? – iRuth

+0

В моем классе Painter, как публичный класс Painter { закрытый холст; – jssmkp

+1

Где вы ** инициализировали ** 'холст'? Это -> 'private Canvas canvas;' является ** объявлением ** 'canvas', а не его ** инициализацией **. Вы должны искать что-то вроде 'canvas = new Canvas();' – iRuth

ответ

1

Я предлагаю вам отлаживать эту строку ->canvas.drawBitmap(bitmap, null, dstRect, paint);, чтобы выяснить, что является недействительным. Я вижу, что вы инициализировали dstRect и paint, поэтому я не думаю, что у них будет проблема с нулевым указателем. Чтобы отладить его, вы можете сделать что-то вроде:

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

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

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

Это должно сказать вам, что вызывает исключение нулевого указателя.

Дайте мне знать, если это поможет.

Смежные вопросы