Есть ли в Java встроенная поддержка событий, аналогичная C #? - PullRequest
8 голосов
/ 12 января 2009

Я немного сбит с толку из-за того, что слышал, что Java не выполняет события.

Но я знаю, что это делает события GUI.

Я что-то упустил? Есть ли в Java механизм обработки событий?

Я знаю, что могу реализовать шаблон подписчика издателя, но я ищу встроенную поддержку в Java.

Кажется, я что-то помню о событиях добавления Java в Java 5 или 6, но я не могу вспомнить, где я это слышал, и, возможно, я это выдумал.

По сути, я оборачиваю устройство в класс java, который генерирует события, и я ищу наиболее логичный способ разоблачения этого. Я пришел в основном из .Net Background, и я ищу что-то вроде событий в .Net (C #)

Любая помощь будет оценена.

Ответы [ 9 ]

15 голосов
/ 12 января 2009

Как вы уже сказали, вы можете сделать то же самое с шаблоном издатель-подписчик / наблюдатель. Это просто требует немного больше работы.

И нет, в Java нет встроенной поддержки событий, как в C # для делегатов.

4 голосов
/ 12 января 2009

Механизм подписки / публикации, предложенный другими здесь, позволит вам реализовать синхронные события. Для асинхронных циклов событий (запустить и забыть) Вы можете посмотреть на «актеров». Actor<A> состоит из обработчика сообщений (событий) типа A, а также стратегии потоков для выполнения обработчика. Это позволяет вам выполнять одновременную асинхронную обработку событий, как показано ниже:

public class EventExample {
  public static void main(String[] args) {
    while ((char c = System.in.read()) >= 0) {
      eventHandler.act(c);
    }
  }

  public static Actor<Character> eventHandler =
    Actor.actor(Strategy.simpleThreadStrategy(), new Effect<Character>() {
      public void e(Character c) {
        // Do something with c here.
      }
    });
}

Получить библиотеку актеров здесь. См. Javadoc здесь.

1 голос
/ 29 июля 2010
1 голос
/ 12 января 2009

Из того, что я помню о Java (не работал с ним> 6 месяцев), я не думаю, что есть события аля .NET Лучше всего будет использовать шаблон издателя / подписчика. Это довольно легко реализовать и довольно надежно.

0 голосов
/ 13 января 2009

Вы также можете взглянуть на библиотеку EventBus с открытым исходным кодом, которая, в отличие от стандартного шаблона издатель / подписчик, использует класс-посредник (шину событий) для уменьшения жесткой связи требуется в шаблоне издатель / подписчик (где подписчики должны знать обо всех издателях, чтобы зарегистрироваться на них, что не всегда возможно и часто громоздко).

Я использовал его в приложениях с графическим интерфейсом, но он может работать с любыми видами событий.

0 голосов
/ 12 января 2009

В Java нет встроенной поддержки - вам придется реализовать Шаблон наблюдателя (он же Subscribee / Publish). Это довольно просто - не более десятка строк кода.

0 голосов
/ 12 января 2009

Я не разбираюсь в C #, но Java Beans, которые не являются компонентами пользовательского интерфейса, может, конечно, уведомлять слушателей об изменениях состояния с помощью Events:

http://java.sun.com/developer/onlineTraining/Beans/beans02/

Это было частью спецификации Java Beans с момента ее появления. Обратите внимание на дату в учебнике: это винтаж 2000.

Источник и слушатель должны работать в одной и той же JVM. Вам нужно будет использовать прокси для связи с чем-то, работающим в другой JVM, но это может быть сделано.

Я гуглил учебник по событиям C # и нашел this . Регистрация слушателей в Java и запуск событий, изменяющих свойства, напоминали то, что я видел, когда просматривал учебник по C #. Я что-то упустил? (Я признаю, что я не читал глубоко - сейчас нет времени.)

0 голосов
/ 12 января 2009

Swing или AWT, которые являются наборами инструментов пользовательского интерфейса Java, оба обрабатывают события - посмотрите официальное руководство по для примеров. Вам, конечно, нужно будет написать свой интерфейс на Swing, чтобы иметь возможность регистрировать слушателей этих событий.

0 голосов
/ 12 января 2009

Вам нужны темы. У GUI в java есть события, потому что есть специальный поток для событий пользовательского интерфейса для отправки. Есть также нечто, называемое Observer и Observable (это нейтральная по вкусу версия слушателей событий из GUI), но это просто шаблон проектирования ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...