当前位置:  开发笔记 > 编程语言 > 正文

多线程:在使用对象时将对象设置为null

如何解决《多线程:在使用对象时将对象设置为null》经验,为你挑选了2个好方法。

我有一个有渲染线程的小应用程序.所有这个线程都是在我们当前位置绘制我的对象.

我有一些代码:

public void render()
{
    // ... rendering various objects

    if (mouseBall != null) mouseBall.draw()

}

然后我还有一些鼠标处理程序,当用户单击鼠标时,它会创建鼠标键并将其设置为新球.然后用户可以拖动鼠标,球将跟随鼠标移动的位置.当用户释放球时,我有另一个设置mouseBall = null的鼠标事件.

问题是,我的渲染循环运行得足够快,随机时间条件(mouseBall!= null)将返回true,但在该点之后的那一瞬间,用户将放开鼠标,我将得到一个nullpointer在null对象上尝试.draw()的异常.

这样的问题的解决方案是什么?



1> Greg Hewgill..:

问题在于你正在访问mouseBall两次,一次是检查它是否是null,另一次是在它上面调用一个函数.你可以使用像这样的临时代码来避免这个问题:

public void render()
{
    // ... rendering various objects
    tmpBall = mouseBall;
    if (tmpBall != null) tmpBall.draw();
}



2> Nathaniel Fl..:

您必须同步if和draw语句,以确保它们作为一个原子序列运行.在java中,这将是这样做的:

    
public void render()
{
    // ... rendering various objects
    synchronized(this) {
        if (mouseBall != null) mouseBall .draw();
   }
}

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有