我目前正在编写一个带有 Swing-Interface 的小型应用程序,其中包含一堆按钮。现在我的问题如下:启动应用程序后,调用一个方法,我想等待两个按钮被按下,然后正常进行。我有两个线程,一个是主线程,另一个是为了等待两个按钮被按下而创建的。对于按钮,我像往常一样添加了一个 ActionListener,它将一个变量增加一个,并在变量为 2 时调用一个唤醒另一个的方法。
所以这是我的代码:
int counter = 0;
static Thread thread1;
static Thread thread2;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
thread1 = new Thread() {
@Override
public void run() {
MainFrame frame = new MainFrame();
frame.setVisible(true);
start();
}
};
thread1.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MainFrame() {
//other stuff and similar Listeners
JButton button1 = new JButton();
button1.addActionListener(new ActionAdapter() {
@Override
public void actionPerformed(ActionEvent ae) {
count++;
notifyIfTwo();
}
});
}
public void notifyIfTwo() {
if (count == 2) {
synchronized(thread2) {
notifyAll();
}
}
}
public void start() {
thread2 = new Thread() {
@Override
public void run() {
try {
synchronized(thread1) {
thread2.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread2.start();
//other stuff
}
不管我怎么做,我总是得到一个 IllegalMonitorStateException。我还尝试使用 thread2 中的循环来检查计数器是否为 2,但我得到了相同的结果。我认为这与同步问题有关,但我对整个多线程的东西还是陌生的,所以如果你能给我一些指向正确方向的指示,我将不胜感激。
或者,也许您甚至知道一种更简单的方法来解决整个“等到按下两个按钮”的问题?
提前致谢,
问候