Java 即使线程结构中的条件为真,在if条件下也无法达到?

Java 即使线程结构中的条件为真,在if条件下也无法达到?,java,javafx-2,javafx,javafx-8,Java,Javafx 2,Javafx,Javafx 8,我试着做一些事情,比如每当我按下一个按钮,我想进入在infite循环中声明的if条件(条件是一个布尔变量)的内部。因此,action listener方法的目的是使布尔字段turnFlag为true,然后我可以访问System.out.println(“Counter=“+Counter”)语句。然而,当我按下on按钮时,它从不进入if(turnFlag),甚至控制台也会将turnFlag打印为true。我不明白为什么它不进入它?。如果你能帮忙,我将不胜感激 public class Examp

我试着做一些事情,比如每当我按下一个按钮,我想进入在infite循环中声明的if条件(条件是一个布尔变量)的内部。因此,action listener方法的目的是使布尔字段
turnFlag
为true,然后我可以访问
System.out.println(“Counter=“+Counter”)语句。然而,当我按下on按钮时,它从不进入
if(turnFlag)
,甚至控制台也会将turnFlag打印为true。我不明白为什么它不进入它?。如果你能帮忙,我将不胜感激

public class ExampleController extends Thread implements Initializable {

    @FXML private static Button theButton;
    private int counter;
    private static boolean turnFlag=false;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {

        counter = 0;
        this.start();
    }

    @Override
    public void run(){

        while(true){

            if(turnFlag){
                System.out.println("Counter = " + counter);
                turnFlag = false;
            }

        }
    }

    @FXML private void onAction(ActionEvent event){

        turnFlag=true;
        System.out.println("turnFlag = " + turnFlag);
    }
}
编辑:我忘了共享应用程序类,就像

public class Example2 extends Application {

    public static Parent rootPane;  

    @Override
    public void start(Stage primaryStage) throws IOException {

        rootPane = FXMLLoader.load(getClass().getResource("example.fxml"));

        Scene scene = new Scene(rootPane);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

您得到的输出是什么?@JunedAhsan按下按钮后,我总是只得到
turnFlag=true
。它从不打印
计数器=
部件。您确定线程已启动吗?你能试着放一个sysout来确认这一点吗?也许
turnFlag
需要是
volatile
。顺便说一句:你的代码在运行时会占用整个CPU,因为它根本没有睡眠!