OVH Cloud OVH Cloud

NullPointerException sur des boutons...

4 réponses
Avatar
une.bevueVOTEZ
une erreur très certainement stupide ;-)

j'ai un ensemble de NSButton (l'équivalent des JButton mais en Cocoa) :

public NSButton descriptionChkBox;
public NSButton regionChkBox;
[...]
public NSButton drinkWithChkBox;

puis ces mêmes boutons en array :

public NSButton bottlesCheckBoxes[] = {descriptionChkBox,
regionChkBox, [...], drinkWithChkBox};


plus loin, si je fais :

NSButton checkBox = new NSButton();
checkBox = (NSButton) bottlesCheckBoxes[i];
(avec i au bonnes valeurs)
j'ai chechbox == null d'où le NullPointerException

par contre si je fais :
checkBox = (NSButton) descriptionChkBox;
(donc quelque soit i, pour essai)
je n'ai pas NullPointerException et je ne comprend pas mon erreur...
--
une bévue

4 réponses

Avatar
damien guerin
Moi ça me choque pas : descriptionChkBox, regionChkBox,
drinkWithChkBox ne sont pas instanciés quand tu les mets en tableau...

Par contre, pourquoi faire un cast checkBox = (NSButton)
bottlesCheckBoxes[i]; alors que bottlesCheckBoxes contient déjà des
NSButton??

Pourquoi tu instancie checkBox alors que à la ligne d'après tu
éclases l'objet?
NSButton checkBox = new NSButton();
checkBox = (NSButton) bottlesCheckBoxes[i];
Avatar
une.bevueVOTEZ
damien guerin wrote:

Moi ça me choque pas : descriptionChkBox, regionChkBox,
drinkWithChkBox ne sont pas instanciés quand tu les mets en tableau...


ok, merci, je pige +/- car ce qui marche maintenant :

public NSButton descriptionChkBox;
public NSButton regionChkBox;
[...]
public NSButton drinkWithChkBox;


puis, plus loin (dans mon "public void awakeFromNib() {...}" càd quand
l'ui apparaît) :

NSButton bottlesCheckBoxes[] = {descriptionChkBox,
regionChkBox, [...], drinkWithChkBox};

oui, l'instanciation des "descriptionChkBox" et autres doit-être faite
automatiquement par Cocoa d'où la nécessité de mettre le tableau après
cette instanciation càd dans awakeFromNib() où l'ui est apparue...

Par contre, pourquoi faire un cast checkBox = (NSButton)
bottlesCheckBoxes[i]; alors que bottlesCheckBoxes contient déjà des
NSButton??


oui, c'est inutile de caster...

Pourquoi tu instancie checkBox alors que à la ligne d'après tu
éclases l'objet?
NSButton checkBox = new NSButton();
checkBox = (NSButton) bottlesCheckBoxes[i];


un essai bidon, en fait j'utilisait :

NSButton checkBox = bottlesCheckBoxes[i];
--
une bévue

Avatar
UrukHai
Je trouve beaucoup d'erreur dans ton code.
Tout d'abord à la déclaration de tes fields : tu déclares un tableau
et tu le remplie sans même avoir pris le temps de les instancier.
C'est normal que tu te trouve avec un nullPointerexception.
Moi j'aurai fait comme ça :

public NSButton descriptionChkBox;
public NSButton regionChkBox;
[...]
public NSButton drinkWithChkBox;
public NSButton[] bottlesCheckBoxes;

publi void init(){
descriptionChkBox = new NSButton();
regionChkBox = new NSButton();
[...]
drinkWithChkBox = new NSButton();
bottlesCheckBoxes = new NSButton[]{descriptionChkBox,
regionChkBox, [...], drinkWithChkBox};
}

et après tu peux travailler normalement...sans nullpointerexception
J'espère t'avoir aidé ;)
Avatar
une.bevueVOTEZ
UrukHai wrote:

Tout d'abord à la déclaration de tes fields : tu déclares un tableau
et tu le remplie sans même avoir pris le temps de les instancier.


ouais, mais là, je suis en Cocoa-Java pas en Swing-Java et les
instanciations de mes NSButton se font toutes seules mais APRES avoir
rempli le tableau : NSButton[] bottlesCheckBoxes, c'est là où je me suis
laisser avoir.
--
une bévue