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.