2013-09-10 3 views
0

Здесь я буду говорить чисто концептуально.Ждите завершения слушателя

У меня есть класс, который имеет слушателя, прикрепленную к нему, который делает что-то. У меня есть целый ряд объектов, построенные из этого класса

У меня также есть статический метод foo() которого доступа к массиву, а затем делает что-то еще.

Doing что-то еще вызывает слушателя, и если я не пауза что-то еще до то делается, код не работает. foo() знает, когда прослушиватель запускается.

Кроме того, слушатель имеет возможность напрямую вызвать слушателя на другом объекте, который был построен из того же класса. foo() не может знать, случится это или нет, или сколько раз.

Так как я могу заставить foo() ждать, пока исполнитель выполнит, а затем, если слушатель не вызвал цепную реакцию, продолжите там, где он остановился, или иначе дождитесь завершения выполнения любого запущенного слушателя?

+0

«Подождите, пока какой-либо запущенный слушатель завершит выполнение» - это означает, что запущенный слушатель выполняется не как вызов метода, а каким-то параллельным способом - как поток, Runnable/Callable в пуле потоков или каким-либо другим способом , Но вы не описали природу слушателей. Как мы можем сказать, как подождать, если мы не знаем, что ждать? –

ответ

0

Вы можете рассмотреть возможность использования дополнительных слушателей:

  • foo() может добавить PropertyChangeListener к тому, что ваш «слушатель» меняет состояние, давайте назовем его модель.
  • то есть модель, уведомить Foo, когда он выполнил свою задачу, запуская способ уведомления о PropertyChangeSupport, что его состояние изменилось ..
  • Затем Foo может удалить его слушатель после завершения его действия ..
Смежные вопросы