Bien le bonjour à tous !

Je travaille actuellement sur un projet en Java.
J'ai besoin d'afficher des messages d'erreurs en cas de levée d'exception, et j'ai donc utiliser le Visual Editor d'Eclipse pour me générer une petite classe de fenêtre. La voici :

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.BoxLayout;
import javax.swing.JTextPane;
import javax.swing.JSeparator;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.Font;
import javax.swing.WindowConstants;
 
public class Erreur extends JFrame {
 
	private static final long serialVersionUID = 1L;
 
	private JPanel jContentPane = null;
 
	private JTextPane zone_excuse = null;
 
	private JTextPane zone_detail = null;
 
	private JTextPane zone_exception = null;
 
	private JSeparator jSeparator = null;
 
	private JSeparator jSeparator1 = null;
 
	private JTextPane detail = null;
 
	private JTextPane exception = null;
 
	/**
         * This is the default constructor
         */
	public Erreur() {
		super();
		initialize();
	}
 
	/**
         * This method initializes this
         * 
         * @return void
         */
 
	private void initialize() {
		this.setSize(525, 220);
		this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/Icones/Bayonne.png")));
		this.setBackground(Color.white);
		this.setContentPane(getJContentPane());
		this.setTitle("ERREUR : Veilleur de messagerie");
	}
 
 
	/**
         * This method initializes jContentPane
         * 
         * @return javax.swing.JPanel
         */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BoxLayout(getJContentPane(), BoxLayout.Y_AXIS));
			jContentPane.add(getZone_excuse(), null);
			jContentPane.add(getJSeparator(), null);
			jContentPane.add(getDetail(), null);
			jContentPane.add(getZone_detail(), null);
			jContentPane.add(getJSeparator1(), null);
			jContentPane.add(getException(), null);
			jContentPane.add(getZone_exception(), null);
		}
		return jContentPane;
	}
 
	/**
         * This method initializes zone_excuse  
         *      
         * @return javax.swing.JTextPane        
         */
	private JTextPane getZone_excuse() {
		if (zone_excuse == null) {
			zone_excuse = new JTextPane();
			zone_excuse.setEditable(false);
			zone_excuse.setText("Le veilleur de messagerie a rencontré une erreur critique. Veuillez nous excuser pour le dérangement occasionné par cette erreur.");
			zone_excuse.setFont(new Font("Dialog", Font.BOLD, 12));
			zone_excuse.setBackground(new Color(255, 255, 204));
		}
		return zone_excuse;
	}
 
	public void set_Zone_excuse_text(String new_value) {
		zone_excuse.setText(new_value);
	}
 
	/**
         * This method initializes zone_detail  
         *      
         * @return javax.swing.JTextPane        
         */
	private JTextPane getZone_detail() {
		if (zone_detail == null) {
			zone_detail = new JTextPane();
			zone_detail.setEditable(false);
			zone_detail.setFont(new Font("Dialog", Font.PLAIN, 10));
		}
		return zone_detail;
	}
 
	public void set_Zone_detail_text(String new_value) {
		zone_detail.setText(new_value);
	}
 
	/**
         * This method initializes zone_exception       
         *      
         * @return javax.swing.JTextPane        
         */
	private JTextPane getZone_exception() {
		if (zone_exception == null) {
			zone_exception = new JTextPane();
			zone_exception.setEditable(false);
			zone_exception.setFont(new Font("Dialog", Font.PLAIN, 10));
		}
		return zone_exception;
	}
 
	public void set_Zone_exception_text(String new_value) {
		zone_exception.setText(new_value);
	}
 
	/**
         * This method initializes jSeparator   
         *      
         * @return javax.swing.JSeparator       
         */
	private JSeparator getJSeparator() {
		if (jSeparator == null) {
			jSeparator = new JSeparator();
		}
		return jSeparator;
	}
 
	/**
         * This method initializes jSeparator1  
         *      
         * @return javax.swing.JSeparator       
         */
	private JSeparator getJSeparator1() {
		if (jSeparator1 == null) {
			jSeparator1 = new JSeparator();
		}
		return jSeparator1;
	}
 
	/**
         * This method initializes detail       
         *      
         * @return javax.swing.JTextPane        
         */
	private JTextPane getDetail() {
		if (detail == null) {
			detail = new JTextPane();
			detail.setEditable(false);
			detail.setFont(new Font("Dialog", Font.BOLD, 12));
			detail.setText("Détails et solutions :");
		}
		return detail;
	}
 
	/**
         * This method initializes exception    
         *      
         * @return javax.swing.JTextPane        
         */
	private JTextPane getException() {
		if (exception == null) {
			exception = new JTextPane();
			exception.setEditable(false);
			exception.setFont(new Font("Dialog", Font.BOLD, 12));
			exception.setText("Message système à communiquer au service informatique :");
		}
		return exception;
	}
 
}  //  @jve:decl-index=0:visual-constraint="10,10"
Dans mon main(), je crée donc la fenêtre et je la masque via un dispose() pour libérer les ressources associées :

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
public class Main
{
	/*
	 * Lancement de l'application.
	 */
	public static void main(String[] args) 
	{	
		Erreur fenetre_erreur = new Erreur();
		fenetre_erreur.setVisible(true);
		//fenetre_erreur.dispose();
 
		// Lancement de l'applicatif par la mise en place :
		// - de l'icone en barre des tâches
		// - de son menu, qui permet d'effectuer des tâches utilisateur
		new Icone_et_Menu();	
	}
}
Jusque là tout donctionne. C'est via mon "Icone_et_Menu()" que je ferai appel à des fonctions, grâce à des écouteurs sur mon menu. Pour ne pas embrouiller mon code, j'ai mes foncions dans un autre fichier.

Dans ces fonctions là, et plus précisément dans des "catch", je dois faire appel à ma fenetre d'erreur pour l'afficher et changer le texte des champs.
Mon soucis, evidemment, c'est que ma "fenetre_erreur" n'y est pas visible...

Comment faire ?

Dois-je forcément la passer en paramètre à mon applicatif, puis à mes fonctions ? Bien que le passage de paramètre se fasse par référence, ca me parait un peu lourd.

Une autre possibilité semblerait être de créer/disposer d'une nouvelle fenêtre à chaque fois qu'une exception est levée... Mais puisque cette application va rester en barre des tâches très longtemps (plusieurs jours eventuellement), est-ce que cette solution est viable sans alourdir la mémoire ? Est-ce que le dispose() est l'équivalant de la destruction de l'objet sur ce plan là ?

Merci pour vos conseils et vos remarques :-).