2011-08-16 50 views
3

我的程序在任何旋轉/方向啓動時運行得非常好,但是當我在風景< - >縱向之間更改方向時,由於我的畫布,我得到空指針異常。當我更改Android的屏幕方向時,爲什麼我會在畫布上獲得空指針異常?

@Override 
public void run(){ 
    while(running){ 
     if(surfaceHolder.getSurface().isValid()){ 
      Canvas canvas = surfaceHolder.lockCanvas(); 
      canvas.drawColor(Color.BLACK); //NULLPOINTEREXCEPTION here 
      paint(canvas); //another function of mine 
      surfaceHolder.unlockCanvasAndPost(canvas); 
     } 
    } 
} 

而且我的android:configChanges =在我的清單 「方向」 以及

@Override 
public void onConfigurationChanged(Configuration newConfig){ 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.main); 
} 

當我註釋掉canvas.drawColor(Color.BLACK),塗料(畫布)被調用和那麼下次在該函數中使用畫布時會發生空指針異常。

幫助?

回答

1

我建議考慮看看這個線程: Activity restart on rotation Android

明確: 創建一個應用程序類和移動畫布初始化那裏。

public class MyApplicationClass extends Application { 
    @override 
    public void onCreate() { 
    super.onCreate(); 
    // TODO Put your application initialization code here. 
    } 
} 
3

Javadoc for SurfaceHolderlockCanvas()將返回null如果Canvas還沒有準備好,所以您需要爲做好準備。它表示要使用Callback.surfaceCreated()回調來了解何時可以安全使用Canvas

相關問題