【发布时间】:2015-06-14 07:36:22
【问题描述】:
我创建了一个网络游戏。我遇到了(看似)无法解释的错误的问题。请注意,卡片是通过鼠标单击添加到 ArrayList 中的,并且此类在其自己的线程上运行。
private void waitForAction(){
tb.report("Waiting for user to make a move...");
selectedCards = new ArrayList<Card>();
while(selectedCards.size() < 2){
if(selectedCards.size() == 2)//Wtf is going on here...?
tb.report("This loop is (not) broken.");
else
tb.report("Looping..");
};
tb.report("This player has selected 2 cards.");
}
当我删除 else 语句时,循环永远不会退出,print(report()) 方法向我证明了这一点。我在早期的开发中遇到了同样的问题,但是通过添加 if-else 语句的 if 部分来纠正它。老实说,我感到困惑,逻辑推理告诉我 JVM 没有检查条件,因为线程没有运行,但是在整个程序中我只调用过一次 Thread 的 start() ,否则它不会被我的代码触及。任何更明智的鞋底的意见将不胜感激。
【问题讨论】:
-
请发布您的输出!
-
另一个线程发生了什么?到目前为止,我只看到一个线程中 selectedCards 从未发生变异,因此循环永远运行也就不足为奇了。
-
我怀疑另一个线程正在将卡片添加到不同的 ArrayList 中,所以这个没有被修改。
-
您可能没有在两次运行之间完全重新编译您的代码。
-
@Rong - 目前我已经获得了超过 2000 行代码,其中大部分是图形输出,我同意如果没有更多就很难解决,但通常这是对我们隐藏的显而易见的事情。
标签: java multithreading loops if-statement