Bonsoir
D'avance merci pour votre lecture
Je travaille en ce moment sur la conception d'une interface graphique.
J'ai obtenu un comportement que je ne m'explique pas. Afin de l'illustrer voici un exemple
mon main
ma definition de JFrame
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 import java.io.IOException; import javax.swing.SwingUtilities; public class Exemple { private final static exemple_frame mes_frames[] = new exemple_frame[1]; public static void main (String [] args)throws IOException { final int k = 0; SwingUtilities.invokeLater(new Runnable(){ public void run(){ mes_frames[k] = new exemple_frame("Exemple 0"); mes_frames[k].setVisible(true);//On la rend visible if (!mes_frames[k].equals(null)) { System.out.println("je suis connu dans mon thread createur"); } else { System.out.println("je ne suis pas connu dans mon thread createur"); } } }); /*if (!mes_frames[k].equals(null)) { System.out.println("je suis connu dans le main"); } else { System.out.println("je ne suis pas connu dans le main"); }*/ SwingUtilities.invokeLater(new Runnable(){ public void run(){ if (!mes_frames[k].equals(null)) { System.out.println("je suis connu dans un nouveau thread"); } else { System.out.println("je ne suis pas connu dans un nouveau thread"); } } }); } }
Un code pas très sorcier qui crée une JFrame et regarde ou elle est connu
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 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class exemple_frame extends JFrame { public exemple_frame(String title){ super(); build(title);//On initialise notre fenêtre } private void build(String title){ setTitle(title); //On donne un titre à l'application setSize(400,240); //On donne une taille à notre fenêtre setLocationRelativeTo(null); //On centre la fenêtre sur l'écran setResizable(true); //On autorise la redimensionnement de la fenêtre setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix } }
Dans les 2 threads lancé aucun soucis.
J'ai le résultat attendu la variable mes_frames étant déclaré avant et déclaré static, final les deux threads l'adresse sans problème
Là ou je ne comprends plus c'est lorsque j'essaye de faire le test dans le main(en virant les commentaires), je ramasse unException in thread "main" java.lang.NullPointerException
at Exemple.main(Exemple.java:21)
Merde un pointeur null mais pourtant j'ai déclaré la variable avant et initialisé aussi, non là je ne pige pas
Merci de votre aide
Partager