2つの空のWhileループがあり、ユーザーが2つのボタンでアクションを実行するのを待っています。ボタンを押すと、while条件に使用されたブール値がtrueに設定され、プログラムが進行します。私はisSendButtonPressed
がtrueに設定されているボタンを、「送信」を押したときに、そうJava:ループ中に空でチェックされていない条件?
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;
}
}
、それが文を出力します。
コードは次のようです。しかし、whileループの中に命令(例えば、System.out.println)を置かない限り、「はい」ボタンのためにそれを行いません。私は正直なところ、最初の作品はなぜ、2番目の作品ではないのか、なぜ作品が役に立たないのか分かりません。
これは入力を待つ**恐ろしい**方法です... – Idos
忙しいループをしないでください。あなたがそれらの 'boolean'を揮発性にしても、それはひどく悪い考えです。 mutexの 'Object.wait()'だけを実行し、ボタンハンドラにそのmutexを通知させます。 –
あなたはisYesButtonPressedを(そしてisSendButtonPressed) 'volatile'にする必要があります。 – ControlAltDel