我有一个游戏应用程序,大多数工作正常。如果在游戏过程中有一个电话进来(而且我目前没有触摸屏幕),那么游戏就会完全像我预期的那样应对随后的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;
}
答案 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());
}
}
}