IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

Erreur java.lang.NullPointerException avec boîte à liste


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut Erreur java.lang.NullPointerException avec boîte à liste
    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.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Quelle est la ligne 174 ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Normal que tu ais cette erreur puisque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private JComboBox<String> listeExpos /*= new JComboBox<>()*/;
    listeExpos n'est pas défini et donc vaut null, ensuite tu essaye de rajouter ce null comme composant.

    Il faut savoir aussi que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    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]};
    sera éxecuté avant ton initialiseBoite(), donc forcement ca n'ira pas, ou alors il faut mettre a jour "composants" pour que listExpos ne soit pas a null.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    Dinobogan -> dsl j'ai pas mit tous le code donc il n'y avait plus de correspondance c'était la ligne :
    getContentPane().add(composants[i], contrainte);

    wax78 -> Merci ça marche nickel, je n'avais pas pensé à réactualiser le tableau. Je suppose donc que ce genre de tableau ne stocke pas la référence des objets mais la "valeur" de ces objets, non ?

    En tous cas merci à vous deux pour votre réponse très rapide.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    il stocke une copie des références. Donc quand tu change la référence d'origine (listeExpos =....) tu ne change pas la référence dans le tableau qui pointe toujours vers l'ancien objet (en l'occurence "null")

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur "java.lang.NullPointerException" avec JSF
    Par opium1er dans le forum JSF
    Réponses: 6
    Dernier message: 15/07/2013, 18h16
  2. Erreur java. lang.NullPointerException
    Par hicham.gi dans le forum Struts 1
    Réponses: 17
    Dernier message: 03/06/2009, 11h11
  3. Réponses: 32
    Dernier message: 20/04/2007, 21h56
  4. [Débutant] Erreur java.lang.NullPointerException
    Par Kevin12 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/02/2007, 15h48
  5. Probleme erreur java.lang.NullPointerException
    Par Tsukaasa dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2006, 18h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo