java - 多线程 : Objects being set to null while using them

标签 java multithreading nullpointerexception

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

我有一些代码:

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

关于java - 多线程 : Objects being set to null while using them,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365743/

相关文章:

java - Tomcat 过滤器生成重复的 localhost.log 行

java - IntelliJ IDEA 无法识别 forEach 调用中的方法递归

java - 通过相机预览查看视频

java - 切入点可以动态地指定线程吗?

安卓 : HttpClient POST : NullPointerException

java - 如何使用 Socket.io 从另一个类正确刷新 ListView?

java - 什么是NullPointerException,我该如何解决?

java - 从文件读取而不是打印到输出

java - SQLite 减少 for 循环时间

java - 在 Java 中同步共享静态对象的正确方法是什么?