我有一个“简单”的同步锁块,如下所示:
private final Object screenLock = new Object();
public void Update(double deltaTime)
{
synchronized (screenLock)
{
screenManager.Update(deltaTime);
}
}
public void Draw()
{
synchronized (screenLock)
{
screenManager.Draw();
}
}
deltaTime
不是 null
,screenManager
也不是 null
,所以我有点迷茫。
我知道我不应该在这么高的层级上放置锁,但无论我把锁放在哪里问题都存在。我有两个线程在运行 Update
和 Draw
,两个线程都有 screenLock
。
什么会导致锁上的 NullPointerException
?
跟踪:
java.lang.NullPointerException at com.dnx.manavo.ScreenManager.Update(ScreenManager.java:107) at com.dnx.manavo.ApplicationActivity.Update(ApplicationActivity.java:98) at com.dnx.manavo.GameThread.run(GameThread.java:43)
NullPointerException
的完整堆栈跟踪是什么?您能提供一个完整的工作示例来演示NPE吗? - JeffreydeltaTime
是一个基本类型,它不能是null
。 - JeffreyscreenManager
不是空的?这会导致 NPE。 - Adam BatkinNullPointerException
是来自于ScreenManager.Update
而不是ApplicationActivity.Update
方法。从你的代码示例来看,这意味着你已经通过了synchronized
块进入了screenManager.Update
方法? - MadProgrammer