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

Langage Java Discussion :

[débutant] NullPointerException ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut [débutant] NullPointerException ?
    bonjour,

    je souhaite créer à titre d'entraînement à la manipulation des fenêtres une application de moyennage. elle est composée d'une fenêtre principale, dans laquelle j'entre le nombre de valeurs à traiter, ce qui ouvre une deuxième fenêtre dans laquelle je reçois les valeurs en question.

    voici mon 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
    package moy;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
    class FenPale extends JFrame implements ActionListener  {
    	FenPale (){
    		setTitle ("Fenêtre principale");
    		System.out.println("constructeur FenPale");
    		setBounds (200,200,400,100);
    		Container contenu=getContentPane();
    		contenu.setLayout(new GridLayout(2,2,10,10));
     
    		val =new JLabel ("nombre de valeurs");
    		nbval=new JTextField(5);				
    		moy=new JLabel("moyenne");
    		moyval=new JTextField(5);
    		moyval.setEditable(false);
     
    		contenu.add(val);
    		contenu.add(nbval);
    		contenu.add(moy);
    		contenu.add(moyval);
    		nbval.addActionListener(this);
    	}
     
    	public void actionPerformed (ActionEvent ev) {
    		if (ev.getSource()==nbval) {
    			System.out.println("évenement");
    			String nval=nbval.getText();
    			System.out.println("votre entrée : "+nval);
     
    			nbrval=Integer.parseInt(nval);
    			System.out.println("modif :"+nbrval);
    			entreedonnees(nbrval);			
    		}
    	}
     
    	private void entreedonnees (int n) {
    		System.out.println("valeur transmise: "+n);	
    		Fen2 fen2=new Fen2(n);
    		fen2.setVisible (true);				
    	}
     
    	private JLabel val, moy;
    	private JTextField nbval, moyval;
    	private String nval, moyenne;
    	private int nbrval, moyen;
    }
     
    class Fen2 extends JFrame implements ActionListener {
     
    	Fen2(int nb) {
    		setTitle ("entrée des données");
    		System.out.println("donnée reçue :"+nb);
    		setBounds (600,200,400,(nb*50)+50);
    		Container contenu2=getContentPane();
    		contenu2.setLayout(new GridLayout(2,nb+1,10,10));
     
    		for (int i=1;i<nb+1;i++) {
    			aff[i]=new JLabel("valeur "+i);
    			val[i]=new JTextField(5);
    			contenu2.add(aff[i]);contenu2.add(val[i]);			
    		}
     
    		bouton=new JButton ("valider");
    		contenu2.add(bouton);
    		bouton.addActionListener(this);
    	}
     
    	public void actionPerformed (ActionEvent e) {
    		if (e.getSource()==bouton) {
     
    		}
    		// traitement des informations : construction objet tableau de valeurs		
    	}
     
    	private JLabel aff[];
    	private JTextField val[];
    	private JButton bouton;
    }
     
    public class Moyenne {
     
    	public static void main(String[] args) {
     
    		System.out.println("main");
     
    		FenPale fen=new FenPale();
    		fen.setVisible(true);
     
    	}
     
    }
    je fais donc un tableau de JLabel et un tableau de JTextField correspondant au nombre de valeurs à traiter transmis en argument pour l'instanciation de l'objet fen2=new Fen2;

    problème, je bute sur ceci:

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at moy.Fen2.<init>(Moyenne.java:63)
    at moy.FenPale.entreedonnees(Moyenne.java:43)
    at moy.FenPale.actionPerformed(Moyenne.java:37)
    at javax.swing.JTextField.fireActionPerformed(Unknown Source)
    at javax.swing.JTextField.postActionEvent(Unknown Source)
    at javax.swing.JTextField$NotifyAction.actionPerformed(Unknown Source)
    at javax.swing.SwingUtilities.notifyAction(Unknown Source)
    at javax.swing.JComponent.processKeyBinding(Unknown Source)
    at javax.swing.JComponent.processKeyBindings(Unknown Source)
    at javax.swing.JComponent.processKeyEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    la ligne 63 correspondant à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			aff[i]=new JLabel("valeur "+i);
    fen2 ne s'affiche pas.

    bien évidemment, lorsque je supprime la boucle if du constructeur de Fen2 cela marche très bien, mais je n'ai plus de TextFields pour rentrer mes valeurs, simplement le bouton.

    j'ai beau chercher, je ne vois pas le souci, et en quoi j'ai une NullPointerException.

    quelqu'un aurait-il la gentillesse de m'éclairer ?

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    je ne vois nullement les variable "aff" et "val" déclarées dans ton code ;-)
    ( hormis val qui désigne un JLabel et non un tableau ).

    EDIT : je corrige : je vois bien la déclaration mais pas l'instanciation : "aff=new Truc[taille]"...

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    hum, non, val est un tableau de JTextField, et aff un tableau de JLabel.

    et l'instanciation est dans la boucle du if, dans le constructeur de Fen2

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Citation Envoyé par Epistocles
    et l'instanciation est dans la boucle du if, dans le constructeur de Fen2
    C'est pas un "if", c'est un "for"...

    Et tu n'y instancies pas, tu initialises... Et vu que c'est assez délicat d'initialiser une valeur d'un tableau sans avoir défini la taille du tableau auparavant... ça plante!

    Donc, cf réponse précédente de iohack pour la solution.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    oui, boucle 'for' pardon.

    effectivement, j'initialise chaque élément du tableau dans la boucle, alors j'ai rajouté l'instanciation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	JLabel aff[]=new JLabel [nb];
    		JTextField val[]=new JTextField[nb];
    juste avant la boucle


    mais là, c'est IndexArrayOutOfBoundsException

    lorsque je remplace la boucle

    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int i=0;i<(nb);i++) {
    			System.out.println("instanciation aff et val ");
    			aff[i]=new JLabel("valeur "+(i+1));
    			val[i]=new JTextField(5);
    			contenu2.add(aff[i]);contenu2.add(val[i]);
    ce qui revient au même, cela marche parfaitement

    merci de vos conseils, je vais tâcher à présent de comprendre la dernière Exception qui vise visiblement un problème de taille de tableau

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    j'ai compris

    merci à vous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/01/2010, 00h09
  2. [EJB3] NullPointerException de débutant
    Par Népomucène dans le forum Java EE
    Réponses: 6
    Dernier message: 17/10/2009, 11h11
  3. [Débutant] Erreur java.lang.NullPointerException
    Par Kevin12 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/02/2007, 15h48
  4. [Débutant(e)] [JTextArea] NullpointerException
    Par harris_macken dans le forum Composants
    Réponses: 9
    Dernier message: 13/06/2005, 13h22
  5. [Débutant]NullPointerException
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2004, 13h58

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