我有一个不断变化的Object变量。更具体地说,它是OpenCV Mat()变量类型。它在背景中不断变化,在相机拍摄另一张照片时设置为新值。然后我尝试从循环中访问变量。我从来没有明确地将变量设置为null,但我相信当变量在后台循环中重置时,它会在设置为值之前立即变为null。
据我所知,对于Object变量类型,java实际上将引用传递给变量,类似于C / C ++中的指针。为了解决这个问题,我使用clone()函数创建一个变量,当我在程序的其他位置访问它时,该变量不会改变。问题是当我对它执行clone()函数时,有时变量为null。我可以使用if(variable!= null)类型的语句来检查这一点,但这并不能保证变量不会从if语句更改为克隆变量。
所以,要问的是,处理这种情况的正确方法是什么,以至于我不会在事故中访问空变量。
如果问题措辞不当,或者您想要包含代码,请告诉我,我会将其包含在内。谢谢!
答案 0 :(得分:1)
这种情况的标准方法是:
final Type localCopy = globalVariable;
if (localCopy != null) {
// work with localCopy variable
// even if null is assigned to globalVariable - your localCopy will not be null
}
答案 1 :(得分:0)
你应该锁定线程,制作副本,释放线程。
你拥有另一个线程吗?
答案 2 :(得分:0)
您需要同步对变量的访问权限,我认为在您的情况下,简单锁定应该有所帮助:
synchronized (object) {
// here you can do whatever you want with object, other calls synchronized will wait until you end
}
答案 3 :(得分:0)
查看代码示例有助于更好地理解您所面临的问题。你在运行多个线程吗?如果是这样,肯定有一些事情需要考虑。使用volatile或同步可能会有所帮助:Difference between volatile and synchronized in Java