Java, эквивалентный из Какао NSNotification?

Мне кажется, это ошибка не Java, а вашей командной оболочки. Попробуйте заключить в кавычки значение аргумента -cp. Вот так:

>java -cp ".;D:\PackageTest\classes" TestCircle

Он будет указывать оболочке не пытаться интерпретировать ее как команду, а просто передать ее в программу Java, как есть.

5
задан Alex Reynolds 28 January 2009 в 19:07
поделиться

5 ответов

Хорошо, предположите, что, например, Вы хотите, чтобы части Вашей программы были уведомлены, когда Ваш Загрузчик запускает сканирование, и когда это заканчивается, сканирование (не волнуйтесь о том, что Загрузчик, или каково сканирование, это примеры из некоторого кода, у меня есть ложь вокруг от моего последнего задания). Вы определяете интерфейс, называете его "ScanListener", как

public interface ScanListener
{
  public void scanStarted();
  public void scanCompleted();
}

Теперь Загрузчик определяет метод для Вашего другого кода для регистрации для обратных вызовов, как

public void addScanListener(ScanListener listener)
{
  listeners.add(listener);
}

Загрузчик, когда это запускает сканирование, выполняет следующий код

for (ScanListener listener : listeners)
{
  listener.scanStarted();
}

и когда это заканчивается, это делает то же самое с listener.scanCompleted ();

Код, который должен быть уведомлен относительно этих реализаций событий, которые взаимодействуют через интерфейс (или они, или во внутреннем классе), и вызовы "loader.addScanListener (это)". Его scanStarted () и scanCompleted () методы называют в подходящее время. Можно даже сделать это с обратными вызовами, которые берут результаты возврата и/или аргументы. Это - все до Вас.

8
ответ дан 18 December 2019 в 14:52
поделиться

Какие уведомления Вы ищете? Если все, что Вы хотите, для одного объекта смочь сказать кому-либо еще "эй, я изменился, обновите соответственно", самый легкий путь состоит в том, чтобы использовать существующий интерфейс Observer и Заметный класс. Или запишите свое собственное с интерфейсом, который определяет то, что Вы хотите быть обращенными слушатели от того, который это изменяется.

2
ответ дан 18 December 2019 в 14:52
поделиться

Нет никакого существующего ранее сервиса для каждого процесса, который диспетчеризирует события в Java, это эквивалентно NSNotificationCenter по умолчанию. В Java тип события указан объектом-событием, являющимся конкретным типом (который также означает, что метод уведомления зависит от того типа) вместо того, чтобы использовать строку. До дженериков, пишущий общему диспетчеру события и получателю, который также безопасен с точки зрения типов, не действительно возможно (засвидетельствуйте быстрое увеличение *Классы событий и *интерфейсы EventListener в библиотеках AWT и Spring).

Существуют некоторые средства для отправки события. Как Paul упомянул, существует java.util.Observable, который, как Вы указываете, требует разделения на подклассы. Существует также java.beans.PropertyChangeSupport, который мог быть полезным в зависимости от Вашей ситуации.

Вы могли также записать тот сами. Источник для PropertyChangeSupport вероятно, доступно в openjdk, и Вы могли посмотреть на заброшенный Apache проект События палаты общин. В зависимости от Ваших потребностей Вам, вероятно, придется волноваться о материале как поточная обработка, seralization, утечки памяти (гарантирующий, чтобы дерегистрация или использующий слабые ссылки), и параллельная модификация (выполнили итерации по копии Вашего списка слушателей, поскольку слушатель может решить не зарегистрировать себя в ответ на изменение).

Теперь, когда дженерики существуют в Java, универсальная библиотека отправки события была бы возможна; однако, я не столкнулся ни с кем. Кто-либо?

2
ответ дан 18 December 2019 в 14:52
поделиться

Существует на самом деле средство, встроенное к Java, который делает точно, что Вы хотите, но это не что-то, что Вы, возможно, рассмотрели, и, честно говоря, вероятно немного тяжеловес для того, что Вы хотите.

Тем не менее однако это действительно существует.

Это - JMX.

Вы создаете MBeans, и затем другие могут зарегистрироваться для событий от тех MBeans. MBean может затем отправить Уведомления.

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

1
ответ дан 18 December 2019 в 14:52
поделиться

Не Java, но проект IPython имеет центр уведомления, записанный в Python здесь, что Вы могли использовать в качестве шаблона для версии Java.

0
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: