2015-02-25 7 views
0

Я реорганизую приложение Swing для использования EventBus Гуавы довольно сильно. Приложение Swing в основном запускает процесс принятия решений, отображает большую коллекцию результатов в JFrame и затем удаляется после закрытия JFrame. Теперь он также подписывается на EventBus для обработки пользовательских манипуляций с данными.EventBus и Swing JFrame Сбор мусора?

Мой вопрос в том, что. Я беспокоюсь, что EventBus может содержать ссылку на JFrame и все свои внутренние ссылки (включая все данные модели) после ее закрытия. Достаточно ли добавить WindowListener для отмены подписки на EventBus, поэтому сбор мусора может освободить данные и базовую модель? Или это то, о чем мне не нужно беспокоиться?

+1

Я незнакомый с EventBus, но да, путем регистрации от EventBus следует удалить хотя бы еще одну сильную ссылку. – MadProgrammer

ответ

2

Вам необходимо указать unregister все компоненты, которые вы зарегистрировали ранее, как есть no WeakEventBus.

Обратите внимание, что объект, регистрация

@throws IllegalArgumentException if the object was not previously registered. 

, если объект не имеет @Subscribe методы. Javadoc не является точным, поскольку и регистрация и отмена регистрации таких объектов ничего не делают (и никогда не бросают).

+0

В общем, не должно быть никаких проблем, слепо подписываясь на все компоненты. Единственный случай, когда отказ от подписывания не удался, - это попытка отказаться от подписки на то, что имеет метод '@ Subscribe', но который был ранее не подписан. – ColinD

+0

@ColinD Я вижу, но таких объектов обычно будет много, если вы просто рекурсивно подпишете целое дерево компонентов. – maaartinus

+0

Под «многими такими объектами» вы имеете в виду объекты, которые вы передаете 'unsubscribe', которые ранее не были переданы' subscribe'? Я не понимаю, почему они должны быть. – ColinD

 Смежные вопросы

  • Нет связанных вопросов^_^