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.
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];
		}
client, jpanel, scroll... ont chaquns une méthode attToNull qui met tous leurs attributs à null.
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;
	}
....