Java while循环条件被其他对象更改
我有一个Java代码不起作用:问题是一个while循环,它永远不会结束,即使它应该结束。 在类Java while循环条件被其他对象更改,java,Java,我有一个Java代码不起作用:问题是一个while循环,它永远不会结束,即使它应该结束。 在类引擎中,我有以下代码: public class Engine { private boolean termine = false; // Code public boolean tour(int joueur) { stade = 1; while(!termine); termine = false; sta
引擎中
,我有以下代码:
public class Engine {
private boolean termine = false;
// Code
public boolean tour(int joueur) {
stade = 1;
while(!termine);
termine = false;
stade = 0;
}
// Code
public void setTermine(boolean t) {
termine = t;
}
}
变量termine
由另一个类调用的方法setTermine
修改:
import java.awt.event.KeyEvent;
public class GestionClavier implements KeyListener {
Engine engine;
GestionClavier(Engine engine) {
this.engine = engine;
}
public void keyReleased(KeyEvent e) {
// Code
if (e.getKeyCode() == KeyEvent.VK_T) {
engine.setTermine(true);
}
}
}
我知道变量
termine
是由GestionClavier
修改的,但是Engine
在(!termine)循环时仍然没有退出。你知道我怎样才能解决这个问题吗?问题出在上;'强>
public boolean tour(int joueur) {
stade = 1;
while(!termine) // Remove semicolon while(!termine);
termine = false;
stade = 0;
}
那为什么要有一个while
循环呢?我认为OP的意思是让代码停止,直到它被另一段代码更改。不,这不是问题所在。我很确定这个循环应该有一个空的主体;虽然
循环是空的,但它只需阻塞tour()
方法,直到键T被激活pressed@Amessihel不,它永远不会终止,因为只要termine为false,它就会循环。添加到@Tarun,我还建议您在while循环中使用括号,否则它只处理下一行,并且state=0将始终被执行。循环是否运行在与调用setTermine的线程不同的线程上?尝试使布尔变量可变。private volatile boolean termine=false代码>成功了!!多谢了,现在不是产生了一个热的100%利用率的CPU核心吗?也许是一根线。睡眠(42);在循环中会很好。我用Eran的方法修复了它,使termine
变量不稳定,即使我真的不明白它的意思。@请看这个相关的问题,与您的问题非常类似: