Bonjour à tous.
Voilà j'ai un problème récurrent mais cette fois-ci il me pose une colle, voilà le message d'erreur complet :

Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at fenetre.FenetreExposition.<init>(FenetreExposition.java:174)
at tests.TestFenetreExposition.main(TestFenetreExposition.java:47)

et voici le code

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
public class FenetreExposition extends JFrame implements ActionListener {
 
	/** Titre de la fenêtre */
	private final String TITRE = "Musée - Expositions";
 
	/** Repertoire du logo du musée */
	private static final String URLLOGO = "logo.jpg";
 
	/** Dimensions de la fenêtre */
	private static final int HAUTEURF = 400;
	private static final int LARGEURF = 600;
 
	/** Logo du musée */
	private ImageIcon logo = new ImageIcon(URLLOGO);
 
	/** Tableau contenant les boutons */
	private JButton[] boutons = { new JButton("Ajouter exposition"), 
								  new JButton("Afficher informations"),
								  new JButton("Afficher expositions"),
								  new JButton("Afficher expositions"),
								  new JButton("Accueil") };
 
	/** Liste déroulante pour afficher les expositions */
	private JComboBox<String> listeExpos /*= new JComboBox<>()*/;
 
	/** Tableau contenant les libéllés à afficher dans la boîte à liste */
	private String[] libelles_expos;
 
	/** Etiquettes pour les champs */
	private JLabel[] label = { new JLabel(logo),
							   new JLabel("Expositions"), 
							   new JLabel("Expositions : "),
							   new JLabel("Date début : "), 
							   new JLabel("Date Fin : "),
							   new JLabel("Mots-clés : ") };
 
	/** 
         * Date de début et date de fin de l'exposition pour la recherche par 
         * date 
         */
	private JDateChooser dateDeb = new JDateChooser(), 
						 dateFin = new JDateChooser();
 
	/** Champs contenant les mots-clés pour la recherche par mots-clés */
	private JTextField motsCles = new JTextField(50);
 
	/** Tableau contenants tous les composants */
	private JComponent[] composants =
			{label[0], label[1], boutons[0], label[2], listeExpos, boutons[1],
			 label[3], dateDeb, label[4], dateFin, boutons[2], label[5], 
			 motsCles, boutons[3], boutons[4]};
 
	/** Abscisse du coin supérieur gauche des composants */
	private static final int[] X = {0, 1, 2, 1, 1, 3, 1, 1, 2, 2, 3, 1, 1, 3, 3};
 
	/** Ordonnées du coin supérieur gauche des composants */
	private static final int[] Y = {0, 0, 1, 2, 3, 2, 4, 5, 4, 5, 4, 6, 7, 6, 8};
 
	/** Largeur des composants */
	private static final int[] LARGEURC = {1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 
										   1, 2, 1, 1};
 
	/** Hauteur des composants */
	private static final int[] HAUTEURC = {1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 
										   1, 1, 2, 1};
 
	/** Poids des composants sur l'axe des abscisses */
	private static final int[] POIDSX = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
										 0, 0, 0};
 
	/** Poids des composants sur l'axe des ordonnées */
	private static final int[] POIDSY = {1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 
										 1, 1, 1};
 
	/** Constante de remplissage */
	private static final int NONE = GridBagConstraints.NONE;
	private static final int HORIZONTAL = GridBagConstraints.HORIZONTAL;
 
	/** Mode de remplissage du composant dans la fenêtre */
	private static final int[] REMPLIR = 
		{NONE, NONE, HORIZONTAL, HORIZONTAL, HORIZONTAL, NONE, NONE, HORIZONTAL, 
		 NONE, HORIZONTAL, NONE, NONE, HORIZONTAL, NONE, NONE };
 
	/** Constantes d'ancrage */
	private static final int F_L_START = GridBagConstraints.FIRST_LINE_START;
	private static final int CENTER = GridBagConstraints.CENTER;
	private static final int F_L_END = GridBagConstraints.FIRST_LINE_END;
 
	/** Points d'ancrages des composants dans la cellule */
	private static final int[] ANCRAGE = 
		{F_L_START, F_L_START, CENTER, F_L_START, F_L_START, CENTER, 
		 F_L_START, F_L_START, F_L_START, F_L_START, CENTER, F_L_START, 
		 F_L_START, CENTER, F_L_END };
 
	/** Marge au-dessus des composants */
	private static final int[] MARGEH = {20, 20, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
									     5, 5, 5, 5};
 
	/** Marge à gauche des composants */
	private static final int[] MARGEG = {20, 5, 5, 5, 5, 5, 5, 5, 45, 45, 5, 
										 5, 5, 5, 5};
 
	/** Marge en dessous des composants */
	private static final int[] MARGEB = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
									     5, 5, 5, 5};
 
	/** Marge à droite des composants */
	private static final int[] MARGED = {5, 5, 5, 40, 60, 20, 5, 5, 5, 60, 20,
										 5, 60, 20, 20};
 
	/**
         * Constructeur de la fenêtre
         * @param tabExpos un tableau contenant les expositions pour l'affichage
         */
	public FenetreExposition(ToutesLesExpositions expos) {
		setTitle(TITRE);
		setSize(LARGEURF, HAUTEURF);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		getContentPane().setLayout(new GridBagLayout());
 
		/* On initialise la boite à liste avec les expositions de l'application */
		initialiseBoite(expos);
		System.out.println(listeExpos.getItemCount());
 
		/* Contrainte pour les composants */
		GridBagConstraints contrainte = new GridBagConstraints();
 
		/* Ajout des composants */
		for(int i = 0; i < composants.length; i++){
			// On prépare la contrainte avec les valeurs
			contrainte.gridx = X[i];			  // Position sur l'axe des abscisses
			contrainte.gridy = Y[i];			  // Position sur l'axe des ordonnées
			contrainte.gridwidth = LARGEURC[i];   // Largeur
			contrainte.gridheight = HAUTEURC[i];  // Hauteur
			contrainte.weightx = POIDSX[i];		  // Poids sur l'axe des abscisses
			contrainte.weighty = POIDSY[i];		  // Poids sur l'axe des ordonnées
			contrainte.fill = REMPLIR[i];		  // Remplissage de la zone
			contrainte.insets =                   // Marge autour du composant
					new Insets(MARGEH[i], MARGEG[i], MARGEB[i], MARGED[i]);  
			contrainte.anchor = ANCRAGE[i]; // Point d'ancrage
 
			// On ajoute le composant
			getContentPane().add(composants[i], contrainte);
		}	
 
		/* Modification de la police du titre */
		label[1].setFont(new Font("Arial", Font.PLAIN, 36));
 
		setVisible(true);
	}
 
	/**
         * Initialise la boite à liste avec les titres des expositions
         * passés en paramètre
         * @param expos la liste des expositions
         */
	public void initialiseBoite(ToutesLesExpositions expos) {
		libelles_expos = expos.getLibelles();
		listeExpos = new JComboBox<>(libelles_expos); 
	}
 
 
 
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
 
	}
 
}
Le problème (et j'en suis sûr) vient de la boîte à liste. Le programme ne prend pas en compte la partie initialiseBoite(expos) donc je me retrouve avec une boîte seulement déclarée mais pas créée.
Enfin si il le prend en compte puisque l'affichage juste après renvoi 2 (et j'ai bien 2 expositions dans mon main) mais l'erreur se produit.
Si je "décommente" la partie après la déclaration de la boîte à liste plus d'erreur mais une boîte à liste vide dans la fenêtre.

J'espère que vous saurez m'aider.