Java:循环时没有检查空条件?

时间:2016-06-21 15:32:24

标签: java while-loop

我有两个空的while循环,等待用户对两个按钮执行操作。按下按钮后,用于while条件的布尔值设置为true,程序继续执行。

代码是这样的:

public class test {
    static JButton send = new JButton("Send");
    static JButton yes = new JButton("Yes");
    static boolean isSendButtonPressed = false;
    static boolean isYesButtonPressed = false;
    //...

    public static void main(String[] args) {
        send.addActionListener(new sendListener());
        yes.addActionListener(new yesListener());
        //...
        while (!isSendButtonPressed) {} //works
        System.out.println("Send button pressed");
        while (!isYesButtonPressed) {} //doesn't work
        System.out.println("Yes button pressed");

}

class sendListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        test.isSendButtonPressed = true;
    }
}
class yesListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        test.isYesButtonPressed = true;
    }
}

因此,当我按下“发送”按钮时,isSendButtonPressed设置为true,并打印语句。但是,除非我在while循环中放入一条指令(例如,System.out.println),否则它不会对“yes”按钮执行此操作。老实说,我不明白为什么第一部作品而不是第二作品,或者为什么它需要无用的指导才能工作。

1 个答案:

答案 0 :(得分:0)

'The Infamous "Unresponsive User Interface"'说明了如何使用Object.wait()Object.notify()跨线程进行通信。

java内存模型允许字段更改不可见,除非字段为volatile,因此不保证更改UI线程中的非易失性boolean字段会导致循环条件发生变化直到两个线程最终获得/释放锁定。