我想創建一個簡單的背景圖像頂部的圖像大致每30秒更新一次。我使用畫布來完成這個任務,但是當我嘗試在畫布上進行打印時,會拋出一個NPE。據我可以告訴畫布已經初始化。該活動啓動啓動/停止運行繪製方法的線程的視圖。 NPE被拋出的是繪製方法。這是活動的啓動說明了一切:繪製到Android中的畫布拋出空指針異常
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = new GameView(this);
setContentView(view);
view.onCreate();
}
public void onPause() {
super.onPause();
view.onPause();
}
public void onResume() {
super.onResume();
view.onResume();
}
這些都是我的表面觀的主要功能:
public GameView(Context context) {
super(context);
getHolder().addCallback(this);
setFocusable(true);
}
public void onCreate() {
_drawThread = new DrawThread(getHolder(), this);
}
synchronized public void draw(Canvas canvas) {
canvas.getHeight(); //returns NPE
}
public void onResume() {
if (!_drawThread.isAlive()) {
_drawThread.setRunning(true);
_drawThread.start();
} else {
_drawThread.setRunning(true);
}
}
public void onPause() {
boolean retry = true;
_drawThread.setRunning(false);
while (retry) {
try {
_drawThread.join();
retry = false;
} catch (InterruptedException e) {
}
}
}
我的拉線的樣子:
public void run() {
Canvas c;
while (_running) {
c = null;
try {
c = _surfaceHolder.lockCanvas();
synchronized (_surfaceHolder) {
_game.draw(c);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} finally {
if (c != null) {
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
從我可以告訴畫布在創建繪製線程之前不會被初始化,這會導致NPE,但是我看不到代碼有什麼問題。一點幫助或建議會很好。
canvas必須爲null,什麼是_surfaceHolder.lockCanvas()返回? – Sam