4 java multithreading nullpointerexception
我有一个有渲染线程的小应用程序.所有这个线程都是在我们当前位置绘制我的对象.
我有一些代码:
public void render()
{
// ... rendering various objects
if (mouseBall != null) mouseBall.draw()
}
Run Code Online (Sandbox Code Playgroud)
然后我还有一些鼠标处理程序,当用户单击鼠标时,它会创建鼠标键并将其设置为新球.然后用户可以拖动鼠标,球将跟随鼠标移动的位置.当用户释放球时,我有另一个设置mouseBall = null的鼠标事件.
问题是,我的渲染循环运行得足够快,随机时间条件(mouseBall!= null)将返回true,但在该点之后的那一瞬间,用户将放开鼠标,我将得到一个nullpointer在null对象上尝试.draw()的异常.
这样的问题的解决方案是什么?
Gre*_*ill 13
问题在于你正在访问mouseBall两次,一次是检查它是否是null,另一次是在它上面调用一个函数.你可以使用像这样的临时代码来避免这个问题:
public void render()
{
// ... rendering various objects
tmpBall = mouseBall;
if (tmpBall != null) tmpBall.draw();
}
Run Code Online (Sandbox Code Playgroud)
您必须同步if和draw语句,以确保它们作为一个原子序列运行.在java中,这将是这样做的:
public void render()
{
// ... rendering various objects
synchronized(this) {
if (mouseBall != null) mouseBall .draw();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |