我有一个带有渲染线程的小应用程序。这个线程所做的就是在它们的当前位置绘制我的对象。

我有一些代码,如:

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

10-04 11:37