触摸屏时如果有来电话会崩溃

时间:2012-04-01 13:41:33

标签: java android eclipse

我有一个游戏应用程序,大多数工作正常。如果在游戏过程中有一个电话进来(而且我目前没有触摸屏幕),那么游戏就会完全像我预期的那样应对随后的onPause和onResume,并从它停止的地方开始。但是,如果我正在触摸屏幕,那么电话会在程序崩溃时进入。 Logcat在NullPointerException行报告synchronized (micks_thread_thing.getSurfaceHolder())。我认为有时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;
    }

1 个答案:

答案 0 :(得分:1)

尝试将整个synchronized块包装在线程的空检查中:

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