2011-08-16 4 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); 
     } 
    } 
} 

그리고 나는 안드로이드가 : configChanges = 내 매니페스트의 '취향'뿐만 아니라

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

으로 내가 canvas.drawColor (Color.BLACK)를 주석 때, 페인트 (캔버스)가 호출되는 및 다음에 canvas가 그 함수에서 사용될 때 null 포인터 예외가 발생합니다.

도움 말?

답변

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 SurfaceHolderCanvas이 아직 준비되지 않은 경우 lockCanvas()null를 반환합니다, 그래서 당신이 준비 할 필요가 있다고 말한다. Callback.surfaceCreated() 콜백을 사용하여 언제 Canvas을 사용하는 것이 안전한지 알려줍니다.

관련 문제