0

我正在重构一个 Swing 应用程序以大量使用 Guava 的 EventBus。Swing 应用程序基本上运行一个决策过程,在 JFrame 中显示大量结果集合,然后在 JFrame 关闭后处理。现在它还订阅了一个 EventBus 来处理用户对数据的操作。

我的问题是这个。我担心 EventBus 可能会在关闭后保存对 JFrame 及其所有内部引用(包括所有模型数据)的引用。添加一个 WindowListener 是否足以从 EventBus 取消订阅它,以便垃圾收集可以释放数据和底层模型?或者这是我不需要担心的事情?

4

1 回答 1

2

您需要unregister之前注册的所有组件,因为没有 WeakEventBus

请注意,取消注册对象

@throws IllegalArgumentException if the object was not previously registered.

除非对象没有@Subscribe方法。Javadoc 并不准确,因为注册和注销此类对象根本不执行任何操作(并且从不抛出)。

于 2015-02-25T11:39:02.770 回答