2012-04-01 49 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正在成爲空出於某種原因。如果你試圖將這個完整的同步塊包裝在檢查線程爲空的if語句中呢? – FoamyGuy 2012-04-01 14:09:52

+0

剛試過它,它的工作。把你的評論作爲答案,我會將其標記爲正確。 – Mick 2012-04-01 14:29:48

回答

1

嘗試在你的線程包裹整個同步塊空校驗:

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()); 
    } 
    } 
}