Tr�s int�ressant ton probl�me !

J'ai compris pourquoi �a ne fonctionne pas, mais ce n'est pas tr�s logique
de la part de la machine virtuelle. Voil� ce que me dit mon d�bogueur :

* je cr�e une nouvelle instance de TestPanel :
        - il entre dans le constructeur de PanelSchema : appelle super() puis
init(), qui initialise bien ton _raisonSocialeText ...
        - il reprend au d�but de ta classe et r�initialise _raisonSociale et
_raisonSocialeText � null !!!!!
        - il g�n�re le NullPointerException lorsque tu appelles create(), c'est
logique !

Comment r�soudre le probl�me : en n'affectant pas de valeur explicite �
_raisonSociale et � _raisonSocialeText :

public class TestPanel extends PanelSchema {

        private JLabel _raisonSociale;
        private JTextField _raisonSocialeText;

        (etc.)
}

� partir de l� �a marche bien. Alors pourquoi �a plante lorsque tu fais une
initialisation explicite ? Par ce qu'il existe en fait deux fa�ons
d'initialiser
un objet, en Java :

- via un constructeur
- via des initialisateurs : un initialisateur est un bloc { ... }, comme
dans l'exemple ci-dessous :

class A
{
        {
                System.out.println("ceci initialise mon objet");
        }
}

Le bloc d'initialisation est appel� visiblement APRES le constructeur ...

Or quand tu d�clares un champ avec initialisation, par exemple :

class A
{
        int x = 0;
}

pour lui, c'est synonyme de :

class A
{
        int x;

        {
                x = 0;
        }
}



-----Message d'origine-----
De : [EMAIL PROTECTED] [mailto:fduthie@;free.fr]
Envoy� : mercredi 30 octobre 2002 17:48
� : [EMAIL PROTECTED]
Objet :


Bonjour,

J'ai un petit probl�me.

public abstract class A extends JPanel{

        public PanelSchema(){
                super();
                init();
        }
        public abstract void init();
}

public class TestPanel extends PanelSchema {

        private JLabel _raisonSociale = null;
        private JTextField _raisonSocialeText = null;

        public void create(){
                String text = _raisonSocialeText.getText();
                ...
        }

        public void init(){
                _raisonSociale = new JLabel("raisonSociale");
                _raisonSocialeText = new JTextField(20);

                setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

                GridBagLayout gridBagLayout1 = new GridBagLayout();
                setLayout(gridBagLayout1);

                add(_raisonSociale,new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
                    ,GridBagConstraints.WEST, GridBagConstraints.NONE, getInsets
(),
5, 5));

                add(_raisonSocialeText, new GridBagConstraints(1, 0, 1, 1, 0.0,
0.0
                    ,GridBagConstraints.WEST, GridBagConstraints.NONE, getInsets
(),
5, 5));
        }

        public Insets getInsets(){
                return new Insets(0, 0, 0, 0);
        }
}

Si apres avoir creer une instance de TestPanel j'appelle la methode create()
j'ai un nullpointerexecption.
Pourquoi ? Comment je peux resoudre ce probl�me.

Répondre à