我想让一个方法等到ActionEvent方法处理完之后再继续。 例如:
public void actionPerformed(ActionEvent evt) {
someBoolean = false;
}
actionPerformed方法链接到我拥有的textField,按Enter键时会触发该方法。我想要做的是,在actionPerformed方法发生之前,有一个不同的方法暂停。 例如:
public void method() {
System.out.println("stuff is happening");
//pause here until actionPerformed happens
System.out.println("You pressed enter!");
}
有办法做到这一点吗?
答案 0 :(得分:2)
CountDownLatch应该做到这一点。您想要创建一个等待1个信号的锁存器。
在actionPerformed中,你想调用countDown(),在“method”里面你想要等待()。
CNC中 我假设你已经设置了适当数量的线程来处理这种情况。
答案 1 :(得分:1)
有许多方法,CountDownLatch就是其中之一。另一种使用可重复使用的信号量的方法。
private Semaphore semaphore = Semaphore(0);
public void actionPerformed(ActionEvent evt) {
semaphore.release();
}
public void method() {
System.out.println("stuff is happening");
semaphore.acquire();
System.out.println("You pressed enter!");
}
此外,您应该考虑发生的事情的顺序。如果用户多次输入,则应计入多次。并且如果在等待方法获得它之后可能有动作事件进入。您可以执行以下操作:
private Semaphore semaphore = Semaphore(0);
public void actionPerformed(ActionEvent evt) {
if ( semaphore.availablePermits() == 0 ) // only count one event
semaphore.release();
}
public void method() {
semaphore.drainPermits(); // reset the semaphore
// this stuff possibly enables some control that will enable the event to occur
System.out.println("stuff is happening");
semaphore.acquire();
System.out.println("You pressed enter!");
}