我有两个空的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”按钮执行此操作。老实说,我不明白为什么第一部作品而不是第二作品,或者为什么它需要无用的指导才能工作。
答案 0 :(得分:0)
'The Infamous "Unresponsive User Interface"'说明了如何使用Object.wait()
和Object.notify()
跨线程进行通信。
java内存模型允许字段更改不可见,除非字段为volatile
,因此不保证更改UI线程中的非易失性boolean
字段会导致循环条件发生变化直到两个线程最终获得/释放锁定。