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

我有一个Java代码不起作用:问题是一个while循环,它永远不会结束,即使它应该结束。 在类
引擎中
,我有以下代码:

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
变量不稳定,即使我真的不明白它的意思。@请看这个相关的问题,与您的问题非常类似: