JTree
実際にユーザーに表示されている間だけ聞く、TreeModel
または少なくとも対応するものが破棄されるとすぐに登録を解除するにはどうすればよいJFrame
ですか?
私が見る限り、 aJTree
がそのモデルから自身を登録解除する唯一のケースは、( を使用して) 新しいモデルを渡した場合ですsetModel(…)
。
これにより、モデルが別の場所から参照されている場合、ツリーがガベージ コレクションされません。例:ファイル システム ツリーのモデルを常に最新の状態にするために、TreeModel
を使用してを実装しました。WatchService
モデルのリスナーが 1 つであっても、WatchService
ファイル システムの変更についてモデルに通知し続ける必要があるため、ガベージ コレクションを実行することはできません。そのため、JTree
が表示されなくなったとしても、 から更新を取得する必要があるモデルによって引き続きメモリに保持されますがWatchService
、これはもはや必要ありません。
JTree
モデルへの登録と登録解除を行う新しいクラス拡張を作成するのが最善の方法だと思います。その場合、コンポーネントが表示または破棄されるときにどのメソッドが呼び出されますか? おそらくaddNotify()
そしてremoveNotify()
良い候補ですか?