2012-04-01 10 views
0

私はほとんどの場合うまく動作しているゲームアプリを持っています。ゲーム中に電話がかかってきたら(そして私は現在画面に触れていません)、ゲームは次のonPauseとonResumeに対処しています。私が期待していた通りです。しかし、コールが到着した瞬間に画面に触れると、プログラムがクラッシュします。 Logcatは、synchronized (micks_thread_thing.getSurfaceHolder())という行にNullPointerExceptionを報告します。私は時々getSurfaceHolderが失敗することがあると推測しますが、私はエラーを避けるためにコードを違った方法で書くことができないかどうかはわかりません。画面に触れているときに電話がかかってきたらクラッシュします

public boolean onTouchEvent(MotionEvent event) 
    { 
     super.onTouchEvent(event); // not sure if I need this 

     synchronized (micks_thread_thing.getSurfaceHolder()) // this is the line causing the nullpointerexception 
     { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) 
     { 
      do_down(event.getX(),event.getY()); 
     } 
     if (event.getAction() == MotionEvent.ACTION_MOVE) 
     { 
      do_move(event.getX(),event.getY()); 
     } 

     if (event.getAction() == MotionEvent.ACTION_UP) 
     { 
      do_up(event.getX(),event.getY()); 
     } 
     } 
     return true; 
    } 
+2

micks_thread_thingは、何らかの理由でnullになりつつあります。あなたがnullのためにスレッドをチェックするifステートメントの内部で、この全体の同期チャンクをラップしようとしたら? – FoamyGuy

+0

ちょうどそれを試み、それは働いた。あなたのコメントを答えに入れて、それを正しいものとしてマークします。 – Mick

答えて

1

あなたのスレッドにはnullチェックであなたの全体の同期ブロックをラップしてみてください。

if(micks_thread_thing != null) 
{ 
synchronized (micks_thread_thing.getSurfaceHolder()) // this is the line causing the nullpointerexception 
    { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) 
    { 
     do_down(event.getX(),event.getY()); 
    } 
    if (event.getAction() == MotionEvent.ACTION_MOVE) 
    { 
     do_move(event.getX(),event.getY()); 
    } 

    if (event.getAction() == MotionEvent.ACTION_UP) 
    { 
     do_up(event.getX(),event.getY()); 
    } 
    } 
} 
関連する問題