0

Guava の EventBus をかなり多用するように Swing アプリケーションをリファクタリングしています。Swing アプリケーションは基本的に決定プロセスを実行し、大量の結果を JFrame に表示し、JFrame が閉じられると破棄されます。また、EventBus にもサブスクライブして、データのユーザー操作を処理します。

私の質問はこれです。EventBus が閉じられると、JFrame とそのすべての内部参照 (すべてのモデル データを含む) への参照が保持されるのではないかと心配しています。ガベージ コレクションがデータと基になるモデルを解放できるように、EventBus からサブスクライブを解除するために WindowListener を追加するだけで十分ですか? それとも、これは私が心配する必要のないものですか?

4

1 に答える 1

2

WeakEventBusunregisterがないため、以前に登録したすべてのコンポーネントが必要です。

オブジェクトの登録を解除することに注意してください

@throws IllegalArgumentException if the object was not previously registered.

オブジェクトにメソッドがない場合を除き@Subscribeます。Javadoc は正確ではありません。そのようなオブジェクトの登録と登録解除の両方がまったく何もしない (決してスローしない) からです。

于 2015-02-25T11:39:02.770 に答える