je souhaite fermer une fenêtre et éliminer toutes les ressources qui y corresponde (donc les JMenu, Clipboard, JDialog, *Listener) sans quitter l'application (pas de System.exit()).
Pour ce faire, j'essaie de mettre toutes les références à null, j'appelle le garbage_collector, ...
Mais lorsque je profile mon application avec tptp, je remarque qu'il existe encore des références vivantes.
Donc, je me demande si il existe un pattern qui pourrait m'aider.
Ci-dessous le code qui est censé libérer mes ressources.
client, jpanel, scroll... ont chaquns une méthode attToNull qui met tous leurs attributs à null.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public void clear_all() { System.gc(); client.attToNull(); jpanel.attToNull(); scroll.attToNull(); jmenu.attToNull(); mouse.attToNull(); logO.attToNull(); jframe.dispose(); commandes.clear(); jframe = null; client = null; jpanel = null; scroll = null; jmenu = null; mouse = null; logO = null; jframe = null; commandes = null; System.gc(); byte[] j; /* * J'ai rajouter ce code pour le test. * Forcer le gc à passer et vérifier que les références sont * annulées */ for (int i = 0; i < 100; i++) { j = new byte[40 * 1000 * 1000]; }
Exemple pour scroll.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class ScrollConsole extends JScrollBar { private PanelConsole panel; private LogOriginal logO; public void attToNull() { panel = null; logO = null; } ....![]()
Partager