我有一个带有渲染线程的小应用程序。这个线程所做的就是在它们的当前位置绘制我的对象。
我有一些代码,如:
public void render()
{
// ... rendering various objects
if (mouseBall != null) mouseBall.draw()
}
然后我还有一些鼠标处理程序,当用户单击鼠标时,它会创建并将 mouseBall 设置为一个新球。然后用户可以四处拖动鼠标,球将跟随鼠标移动的位置。当用户释放球时,我有另一个鼠标事件设置 mouseBall = null。
问题是,我的渲染循环运行得足够快,随机时间条件 (mouseBall != null) 将返回 true,但在那之后的那一瞬间,用户将松开鼠标,我将得到一个空指针在空对象上尝试 .draw() 的异常。
像这样的问题的解决方案是什么?
最佳答案
问题在于您访问 mouseBall
两次,一次是检查它是否不是 null
,另一次是在其上调用函数。您可以通过使用这样的临时文件来避免此问题:
public void render()
{
// ... rendering various objects
tmpBall = mouseBall;
if (tmpBall != null) tmpBall.draw();
}