Java: ждать ActionEvent - PullRequest
       0

Java: ждать ActionEvent

2 голосов
/ 19 ноября 2011

Я хочу, чтобы метод дождался обработки метода 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 ]

2 голосов
/ 19 ноября 2011

CountDownLatch должно сработать. Вы хотите создать защелку, ожидающую 1 сигнал.

Внутри actionPerformed вы хотите вызвать countDown (), а внутри "метода" вы просто хотите await ().

-edit- Я предполагаю, что у вас уже есть правильное количество потоков, настроенных для разрешения ситуации.

1 голос
/ 19 ноября 2011

Есть много способов, и 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!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...