为什么`if`语句只能在System.out.println()之后工作?

时间:2016-01-30 13:34:32

标签: java if-statement boolean

我是一个包含public boolean变量的类:running。通过按钮,我可以将running设置为true或false。在主要类中,在main函数中我有以下内容:

重点是以这种方式编写的代码不起作用!如果我在System.out.println(frame.running);条件之前添加if,它就有效!你知道为什么吗?

我还尝试在类中创建一个方法,boolean isRunning()返回一个布尔值,但它不起作用。

public static void main(String[] args) {
    Gui frame = new Gui();
    frame.setVisible(true);

    String received = "";

    while (true) {
        if (frame.running == true) {
            System.out.println(frame.running);

            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
            ricevuti = frame.arduino.receivedstring;
            if (ricevuti.isEmpty()) {
                // do something
            } else {
                int[] intArray = null;
                intArray = frame.arduino.parsing(ricevuti, " ");
                System.out.println(intArray.toString());
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您需要将running声明为volatileprint可以解决这个问题,因为它也会强制JVM同步内存。

无论如何,这种繁忙的等待循环通常不是一个好主意,考虑在这里使用wait - notify模式。