Я пишу GUI для программы, которая позволяет пользователю принять или отклонить запрос, отправленный на сокет прослушивающего сервера. Я делаю это, используя DoYouAcceptWindow
и другой бит кода, который его открывает.
Код в DoYouAcceptWindow.java
выглядит следующим образом
public class DoYouAcceptWindow extends JFrame implements MouseListener{
private short d = 0;
private JButton accept;
public DoYouAcceptWindow() {
setLayout(new FlowLayout());
accept = new JButton("Accept");
accept.addMouseListener(this);
add(accept);
pack();
setVisible(true);
}
public short getDecided() {
return d;
}
@Override
public void mouseClicked(MouseEvent e) {
if (e.getSource().equals(accept)) {
System.out.println("Accepted");
d = 2;
}
}
}
(Я удалил много ненужного функции из этого, а также возможность отклонить запрос, чтобы было легче читать)
И код, который использует вышеупомянутый класс:
while (true) {
DoYouAcceptWindow w = new DoYouAcceptWindow();
short decided = w.getDecided();
while (decided == 0) {
decided = w.getDecided();
}
System.out.println("Done!");
w.dispose();
if (w.getDecided() == 2) {
break;
}
}
(Этот код также имел удалено много ненужных частей)
Когда вы нажимаете кнопку, она печатает «принято», как и должно (и я предполагаю, что она устанавливает d = 1 или 2). Тем не менее, оно не вырвется за время l oop. Когда я добавляю оператор печати в while l oop, однако (как это):
while (decided == 0) {
decided = w.getDecided();
System.out.println(0);
}
Это исправляет себя. Если я запускаю его в режиме отладки (в eclipse), он исправляется. Почему оно не вырвалось из-за l oop без оператора print? И как я могу это исправить? (без добавления оператора печати)