Bonjour à tous,

Chasse au nullPointeur, pour cela voici les classes en lien avec celui-ci...

Une Ihm qui récupère les onglets dont le fameux onglets et sont getter :
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
 
package ihm;
 
import java.awt.FlowLayout;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingConstants;
 
import event.Affichage;
import event.MonWindowAdapter;
import ihm.onglets.Auteur;
import ihm.onglets.Client;
import ihm.onglets.Commande;
import ihm.onglets.Editeur;
import ihm.onglets.Livre;
import ihm.onglets.Profil;
 
public class Ihm extends JFrame 
{
	private static final long serialVersionUID = 1L;
 
	private static Menu menu;
	private static JTabbedPane onglets;
	private static Livre ongletLivre;
	private static Auteur ongletAuteur;
	private static Client ongletClient;
	private static Commande ongletCommande;
	private static Editeur ongletEditeur;
	private static Profil ongletProfil;
 
	private JPanel panZoneClient;
	private JPanel panHeader;
 
	//============================================================
	//constructeur
	private Ihm() 
	{
		initIhm();
	}
 
	//initialisation de toute l'application
	private void initIhm()
	{
		//evenement de la fenêtre
		this.addWindowListener(new MonWindowAdapter(this));
		//ajout du menu
		Ihm.menu = new Menu(this);
		//ajout des onglets
		onglets = new JTabbedPane(SwingConstants.NORTH);
 
		//onglets.addChangeListener(this);
 
		ongletLivre = new Livre(this);
		ongletAuteur = new Auteur(this);
		ongletClient = new Client(this);
		ongletCommande = new Commande(this);
		ongletEditeur = new Editeur(this);
		ongletProfil = new Profil(this);
 
		onglets.addTab(Affichage.getRessource().getString("titreongletlivre"),ongletLivre);
		onglets.addTab(Affichage.getRessource().getString("titreongletauteur"),ongletAuteur);
		onglets.addTab(Affichage.getRessource().getString("titreongletclient"),ongletClient);
		onglets.addTab(Affichage.getRessource().getString("titreongletcommande"),ongletCommande);
		onglets.addTab(Affichage.getRessource().getString("titreongletediteur"),ongletEditeur);
		onglets.addTab(Affichage.getRessource().getString("titreongletprofil"),ongletProfil);
		onglets.setOpaque(true);
 
		panHeader = new JPanel();
		panHeader.setLayout(new FlowLayout());
 
		//zone client
		panZoneClient = (JPanel) this.getContentPane();
		panZoneClient.setLayout(new FlowLayout());
 
		panZoneClient.add(Ihm.onglets);
 
		this.setJMenuBar(Ihm.menu);
 
		//Changer la langue
		event.Affichage.getChangerValeurMenu(Ihm.menu);
	}
 
	//============================================================
	//instenciation
	private static Ihm ihm;
	public static Ihm getInstance()
	{
		if (ihm == null) {
			ihm = new Ihm();
		}
		return ihm;
	}
 
	//============================================================
	//Getter and setter
	public static Livre getOngletLivre() {
		return ongletLivre;
	}
	public static Auteur getOngletAuteur() {
		return ongletAuteur;
	}
	public static Client getOngletClient() {
		return ongletClient;
	}
	public static Commande getOngletCommande() {
		return ongletCommande;
	}
	public static Editeur getOngletEditeur() {
		return ongletEditeur;
	}
	public static Profil getOngletProfil() {
		return ongletProfil;
	}
	public static JTabbedPane getOnglets() {
		return onglets;
	}
	public static Menu getMenu() {
		return menu;
	}
	public static Livre getLivre() {
		return ongletLivre;
	}
	public static Auteur getAuteur() {
		return ongletAuteur;
	}
	public static Client getClient() {
		return ongletClient;
	}
	public static Commande getCommande() {
		return ongletCommande;
	}
	public static Editeur getEditeur() {
		return ongletEditeur;
	}
	public static Profil getProfil() {
		return ongletProfil;
	}
}
Maintenant une classe Menu :
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
 
package ihm;
 
import java.awt.Toolkit;
 
import javax.swing.ButtonGroup;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.KeyStroke;
 
import event.EcouteurChoixLangue;
import event.MonEcouteur;
import event.itemCRUD.ActionAjouter;
 
public class Menu extends JMenuBar 
{
	private static final long serialVersionUID = 1L;
 
	private JMenu mnuGestion;
	private JMenuItem itmAjouter;
	private JMenuItem itmModifier;
	private JMenuItem itmSupprimer;
	private JMenuItem itmQuitter;
	private JMenu mnuAide; //« ? »
	private JRadioButtonMenuItem optmFrancais;
	private JRadioButtonMenuItem optmAnglais;
	private JMenuItem itmAide; //sur l’interface graphique
	private JMenuItem itnApropos; //de cette application
	private ButtonGroup grpRadio;
 
	//============================================================
	//constructeur sans argument
	public Menu(Ihm gestion) 
	{
		initMenu(gestion);
	}
 
	//méthode d'initialisation
	private void initMenu(Ihm ihm)
	{
		mnuGestion = new JMenu();
		mnuGestion.setMnemonic('G');
		//ajouter
		System.out.println(Ihm.getOnglets());
		itmAjouter = new JMenuItem(new ActionAjouter(Ihm.getOnglets()));
		itmAjouter.setAccelerator(KeyStroke.getKeyStroke('A', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false));
		mnuGestion.add(itmAjouter);
		//modifier
		itmModifier = new JMenuItem();
		itmModifier.setAccelerator(KeyStroke.getKeyStroke('M', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false));
		mnuGestion.add(itmModifier);
		//supprimer
		itmSupprimer = new JMenuItem();
		itmSupprimer.setAccelerator(KeyStroke.getKeyStroke('S', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false));
		mnuGestion.add(itmSupprimer);
		//quitter
		itmQuitter = new JMenuItem();
		itmQuitter.addActionListener(new MonEcouteur(ihm));
		itmQuitter.setAccelerator(KeyStroke.getKeyStroke('Q', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false));
		mnuGestion.add(itmQuitter);
		//aide
		mnuAide = new JMenu();
		mnuAide.setMnemonic('A');
 
		grpRadio = new ButtonGroup();
		//français
		optmFrancais = new JRadioButtonMenuItem();
		//optmFrancais.setSelected(true);
		optmFrancais.addActionListener(new EcouteurChoixLangue(this));
		mnuAide.add(optmFrancais);
		grpRadio.add(optmFrancais);
		//anglais
		optmAnglais = new JRadioButtonMenuItem();
		optmAnglais.addActionListener(new EcouteurChoixLangue(this));
		mnuAide.add(optmAnglais);
		grpRadio.add(optmAnglais);
		//sélectionner la langue par défaut selon le resource bundle
		if (event.Affichage.getLangue().equals("fr"))
		{
			optmFrancais.setSelected(true);
			optmAnglais.setSelected(false);
		} else if (event.Affichage.getLangue().equals("en")) {
			optmAnglais.setSelected(true);
			optmFrancais.setSelected(false);
		}
		//séparator
		mnuAide.insertSeparator(2);
		itmAide = new JMenuItem();
		itmAide.addActionListener(new MonEcouteur(ihm));
		itmAide.addActionListener(new MonEcouteur(ihm));
		itmAide.setAccelerator(KeyStroke.getKeyStroke('H', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false));
		mnuAide.add(itmAide);
		//A propos
		itnApropos = new JMenuItem();
		itnApropos.addActionListener(new MonEcouteur(ihm));
		itnApropos.addActionListener(new MonEcouteur(ihm));
		itnApropos.setAccelerator(KeyStroke.getKeyStroke('Q', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false));
		mnuAide.add(itnApropos);
 
		//ajouter les menu à la barre
		this.add(mnuGestion);
		this.add(mnuAide);
 
		//Changer la langue du menu
		event.Affichage.getChangerValeurMenu(this);
	}
 
	//==================================================
	//Getter and setter
	public JMenu getMnuGestion() {
		return mnuGestion;
	}
	public void setMnuGestion(JMenu mnuGestion) {
		this.mnuGestion = mnuGestion;
	}
	public JMenuItem getItmAjouter() {
		return itmAjouter;
	}
	public void setItmAjouter(JMenuItem itmAjouter) {
		this.itmAjouter = itmAjouter;
	}
	public JMenuItem getItmModifier() {
		return itmModifier;
	}
	public void setItmModifier(JMenuItem itmModifier) {
		this.itmModifier = itmModifier;
	}
	public JMenuItem getItmSupprimer() {
		return itmSupprimer;
	}
	public void setItmSupprimer(JMenuItem itmSupprimer) {
		this.itmSupprimer = itmSupprimer;
	}
	public JMenuItem getItmQuitter() {
		return itmQuitter;
	}
	public void setItmQuitter(JMenuItem itmQuitter) {
		this.itmQuitter = itmQuitter;
	}
	public JMenu getMnuAide() {
		return mnuAide;
	}
	public void setMnuAide(JMenu mnuAide) {
		this.mnuAide = mnuAide;
	}
	public JRadioButtonMenuItem getOptmFrancais() {
		return optmFrancais;
	}
	public void setOptmFrancais(JRadioButtonMenuItem optmFrancais) {
		this.optmFrancais = optmFrancais;
	}
	public JRadioButtonMenuItem getOptmAnglais() {
		return optmAnglais;
	}
	public void setOptmAnglais(JRadioButtonMenuItem optmAnglais) {
		this.optmAnglais = optmAnglais;
	}
	public JMenuItem getItmAide() {
		return itmAide;
	}
	public void setItmAide(JMenuItem itmAide) {
		this.itmAide = itmAide;
	}
	public JMenuItem getItnApropos() {
		return itnApropos;
	}
	public void setItnApropos(JMenuItem itnApropos) {
		this.itnApropos = itnApropos;
	}
}
Une classe ActionCRUD :
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
 
package event.itemCRUD;
 
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.AbstractAction;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
 
public abstract class ActionCRUD extends AbstractAction 
{	 
	private static final long serialVersionUID = 1L;
	protected ActionListener delegateAction;
 
	public ActionCRUD(JTabbedPane tabbedPane, String nom) {
		super(nom);
		tabbedPane.addChangeListener(new ChangeListener() {
 
			@Override
			public void stateChanged(ChangeEvent e) {
				updateAction(tabbedPane);
			}
		});
		updateAction(tabbedPane); // il faut au moins l'appeler une fois pour la première fois (un onglet étant sélectionné par défaut)
	}
 
	protected void updateAction(JTabbedPane tabbedPane) {
		Component selectedComponent = tabbedPane.getSelectedComponent();
		delegateAction = getAction(selectedComponent);
		setEnabled(delegateAction != null); 
	}
 
	protected abstract ActionListener getAction(Component component);
 
	@Override
	public void actionPerformed(ActionEvent e) {
		if ( delegateAction!=null ) {
			delegateAction.actionPerformed(e);
		}
	}
 
}
Et pour finir une classe ActionAjouter :
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
 
package event.itemCRUD;
 
import java.awt.Component;
import java.awt.event.ActionListener;
 
import javax.swing.JTabbedPane;
 
import event.Affichage;
 
public class ActionAjouter extends ActionCRUD 
{	 
	private static final long serialVersionUID = 1L;
 
	public ActionAjouter(JTabbedPane tabbedPane) {
		super(tabbedPane,Affichage.getRessource().getString("ajouter"));
	}
 
	public ActionListener getAction(Component component) {
		if ( component instanceof ItemAjoutable ) {
			ItemAjoutable itemAjoutable = (ItemAjoutable) component;
			return itemAjoutable.getAjoutItem();
		}
		return null;
	}
}
Et maintenant la console :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
null //il vient du System.out.println... de la classe Menu
Exception in thread "main" java.lang.NullPointerException
	at event.itemCRUD.ActionCRUD.<init>(ActionCRUD.java:18)
	at event.itemCRUD.ActionAjouter.<init>(ActionAjouter.java:15)
	at ihm.Menu.initMenu(Menu.java:46)
	at ihm.Menu.<init>(Menu.java:36)
	at ihm.Ihm.initIhm(Ihm.java:48)
	at ihm.Ihm.<init>(Ihm.java:39)
	at ihm.Ihm.getInstance(Ihm.java:90)
	at ihm.Lancer.charger(Lancer.java:21)
	at ihm.Lancer.main(Lancer.java:13)
Merci pour vos aides...