Java:等待ActionEvent

时间:2011-11-19 02:41:05

标签: java swing events methods

我想让一个方法等到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!");

}

有办法做到这一点吗?

2 个答案:

答案 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!");
}