Пытаюсь разобраться с EventBus из библиотеки Google Guava. Хотелось бы посмотреть пример его использования относительно моей задачи. Другими словами, не могли вы показать пример использования ?
Допустим у меня есть некий класс, в котором есть вот такой вот внутренний класс-слушатель:
private class StopScanButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
try {
portConnection.writeByte((byte) 0xFF);
portConnection.writeByte((byte) 0x05);
portConnection.writeByte((byte) 0xFF);
} catch (SerialPortException | NullPointerException e1) {
labelState.setText("Ошибка! Возможно вы не подключились к устройству!");
labelState.repaint();
}
}
}
Как я могу его вынести на шину?
P.S. Было бы еще лучше, если бы вы показали пример применения относительного этого класса. Но за пример относительно класса выше тоже буду очень признателен.
Ответ
Для начала, нужно создать класс описывающий событие:
public class TestEvent {
private final String message;
public TestEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
и обработчик события, ключевой тут является аннотация @Subscribe, при помощи нее шина и понимает, какое же событие мы собираемся слушать:
public class EventListener {
@Subscribe
public void listen(TestEvent event) {
System.out.println(event.getMessage());
}
}
Затем нужно где-то в приложении инициализировать экземпляр EventBus, например как общедоступное статическое поле в вашем главном классе:
public static final EventBus bus = new EventBus();
После чего зарегистрировать слушатель(слушатели) на шине:
bus.register(new EventListener());
Теперь, где бы ты ни было(у вас - внутри ActionListener для JButton) при вызове:
bus.post(new TestEvent("message"));
все слушатели этого типа события, получат его
Комментариев нет:
Отправить комментарий