Bonjour,
Dans un TreeNode j'ajoute un listener à un objet.
Donc quand l'objet est modifié le treeNode se met à jour.
L'objet va rester en vie en permanence, par contre le JTree contenant le treeNode est régulièrement affiché puis fermé (dispose de la frame le contenant).
Actuellement je ne retire pas le listener du treeNode vers l'objet, donc même lorsque la fenêtre est fermée le treeNode est encore présent et continu à se mettre à jour.
Ma question est la suivante, comment gérer le désabonnement ?
- Faut-il s'abonner au dispose de la JFrame pour retirer les listeners à ce moment-là ? Mais ça implique de retrouver la référence de la JFrame contenant le JTree.
(et dans l'idéal il faudrait détecter la "suppression" du Component parent car ça pourrait être un simple retrait d'un panel contenant le JTree et non la fermeture de la JFrame...)
-> ça me paraît un peu tordu comme solution
- Utiliser des weakReferences lors des abonnements ?
Je connais peu le sujet mais j'ai cru lire que ça pouvait poser problème dans le cas de listener créés dans des classes anonymes.
Et en fait il faudrait attendre le passage du GC en plus de la fermeture de la fenêtre pour libérer les listeners et donc les treeNodes ?
Donc est-ce là une solution miracle à mon problème ou pas vraiment ?
- ou c'est simplement au controller (MVC) de faire ou provoquer les désabonnements (c'est son boulot après tout, mais c'est un peu contraignant)
Pouvez-vous partager vos bonnes pratiques sur cette problématique ? Merci d'avance.
Partager