2015-10-20 51 views
0

我真的很想为这个问题提供一个最简单的工作示例,但我没有成功创建一个。所以我只会描述发生的事情,并希望有人能够帮忙。无法将成员变量设置为空

在我的代码

地方,我有这些行:(此代码是大量的调试我已经做了找到我的问题的原因的结果)

long i = 0; 
while (this.someField != null) { 
    this.someField = null; 
    i++; 
} 
long j = i; 

此代码部署在WebLogic应用程序服务器上。我在while循环之前设置了一个断点。我用IntelliJ远程调试代码。

当代码碰到断点时,我一步步执行它。代码只是循环遍历while循环,但someField永远不会变成null。所以我在循环后面的行设置了第二个断点,并且继续点击。代码立即退出循环并停在此行。我可以告诉我没有更多的循环执行,因为之后我检查了i。但是,this.someField仍然不为空。我多次尝试过,所以我确信代码继续执行循环的原因是我正在调试它。

我不知道如何调试这个问题。我的观察没有任何意义(除非我应用量子力学)。什么会导致这种行为?这是我的JVM中的错误吗?调试器中的错误?还有别的吗?

编辑:

该字段声明如下:

private Vector<KeyValuePair> someField = null; 

这是私人的,我保证是通过与它裂伤所有方法中设置断点没有被另一个线程改变。

+1

任何机会并发性是神秘的一部分吗?你可以显示'someField'的定义吗? – Thomas

+0

应用程序服务器上还有其他线程,但它们都运行在不同的部署中,并且不可能干扰此对象。 – flyx

+0

我认为你需要更努力地产生一个最小的例子。目前你的问题是不可能回答的,目前还不清楚为什么你需要'while'循环来设置一个字段为'null'。 –

回答

0

这似乎是IntelliJ调试器的问题。调试器在调试时设置该值,并且控制流程根据此修改而改变。当我使用Eclipse调试器时,问题消失了。