У меня есть MBassador 1.2.0 событие, но создать с типом пользовательского сообщения (интерфейс Message
):MBassador отправляет только одно сообщение, если в режиме отладки
private final MBassador<Message> bus = new MBassador<Message>(BusConfiguration.SyncAsync());
Всякий раз, когда мой Swing UI выбирает файлы, я добавить их на карту объектов файловой инкапсуляции, а затем отправить сообщение с новыми значениями:
getBus().post(new FilesSelectedMessage(fileObjectMap.values())).asynchronously();
в моем главном классе панели, у меня есть слушатель боб, чтобы слушать за это сообщение:
private class MessageHandler {
@Handler
public void handleFilesSelected(final FilesSelectedMessage message) {
getLogger().info("new files selected; count {}", message.fileObjects().size());
};
}
Конечно зарегистрировать этот компонент в качестве абонента, когда моя панель инициализации:
getBus().subscribe(new MessageHandler());
Когда я запускаю эту программу нормально, первый раз я выбираю файлы, которые я получаю сообщение журнала говорит мне количество файлов, которые я выбран. Но если я вернусь и выберу тот же самый файл, я не получу дальнейших сообщений журнала! (В соответствии с кодом, даже если новые файлы не добавлены, событие должно быть опубликовано с общим количеством выбранных файлов.)
Вот где странно, если я поставил точку останова в том месте, где я отправляю сообщение messsage и один в обработчике сообщений, а затем я запускаю приложение в режиме отладки, оба точки останова попадают каждый раз, когда я выбираю файл, и сообщение журнала также печатается каждый раз! Но если я продолжаю в режиме отладки и удаляю точку останова в обработчике сообщений, приложение попадает в точку останова, где отправляется сообщение, но сообщение журнала никогда не печатается. Даже если я положил точку останова назад в обработчике сообщений, точка останова обработчика сообщения никогда не попадает!
Такое поведение возникает, если я отправляю сообщение синхронно или асинхронно.
Я понимаю, что способ, которым я создал MBassador, устарел, и у меня есть asked о том, как создать экземпляр шины событий (поскольку онлайн-документация устарела и некорректна). Но это все еще не объясняет это странное поведение.
Любая идея, почему только первое сообщение проходит --- но работает нормально, пока я в режиме отладки с установленными точками останова?