Je suis en train de réaliser un programme qui contient un "wizard" c'est-à-dire qui affiche plusieurs fenêtres successivement sur lesquels on peut revenir.

Voici un schéma du code des deux fenêtres :

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
30
31
public class A extends JDialog {
 
 private B fenetreSuivante = null;
 
 (...)
 
 boutonSuivant.addActionListener(new ActionListener() {
  setVisible(false);
 
  if (fenetreSuivante == null) {
   fenetreSuivante = new B();
   fenetreSuivante.setVisible(true);
  });
 }
}
 
public class B extends JDialog {
 
 private A fenetrePrecedente = null;
 
 (...)
 
 boutonPrecedent.addActionListener(new ActionListener() {
  setVisible(false);
 
  if (fenetrePrecedente == null) {
   fenetrePrecedente = new A();
   fenetrePrecedente.setVisible(true);
  });
 }
}
En gros, à chaque fois que je clique sur le bouton suivant de la première fenêtre une nouvelle instance de la fenêtre est créée et la fenêtre actuelle est cachée (mais l'instance existe toujours).

De même, à chaque fois que je clique sur le bouton précédent de la deuxième fenêtre une nouvelle instance de la première fenêtre est créée et la fenêtre actuelle cachée.

Donc si je comprends bien le fonctionnement, des instances de chaque fenêtre vont sans cesse être créées tant que je fais suivant précédent, suivant précédent...

Comment puis-je gérer correctement la mémoire ?
Si j'utilise dispose() à la place de setVisible(false) la fenêtre est détruite mais l'instance toujours présente ?
Faut-il créer des singletons pour chaque fenêtre ?

En fait je voudrais savoir ce que fait dispose() sur une fenêtre et initialiser l'instance de la fenêtre à null (dans ce cas le garbage collector la récupère...?).

Quelqu'un peut-il m'éclaircir ?