Java 即使线程结构中的条件为真,在if条件下也无法达到?
我试着做一些事情,比如每当我按下一个按钮,我想进入在infite循环中声明的if条件(条件是一个布尔变量)的内部。因此,action listener方法的目的是使布尔字段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
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,因为它根本没有睡眠!