Processing nullpointerexception

Résolu
Bonjour,
Je suis en terminale S spécialité ISN et voici un morceau du programme de mon projet de fin d'année: un jeu de bataille navale.
Mais l'erreur "java.lang.NullPointerException
at processing.core.PApplet.displayable(PApplet.java:15350)
at processing.core.PApplet.runSketch(PApplet.java:10857)
at processing.core.PApplet.main(PApplet.java:10377)" apparait.
J'ai eu beau retourner le programme 15 fois, je ne vois pas ce qui cloche. Merci d'avance de regarder :)

//variables pour la bataille navale
PImage viseur;
PImage platbnavale;
PImage bateau;
boolean placer = false;
boolean placej1 = false;
boolean placej2 = false;
boolean b1j1 = true;
boolean b2j1 = true;
boolean b3j1 = true;
boolean b1j2 = true;
boolean b2j2 = true;
boolean b3j2 = true;
boolean initialisation= false;
int x = 1;
int y = 1;
void setup
{
background(0);
size(933,700);
frameRate(10);
}

void draw()
{
if ( initialisation == false)
{
init();
}

if (placer == false)
{
placerj1();
}

}

void init()
{
viseur= loadImage("viseur.png");
platbnavale = loadImage("plat.jpg");
bateau = loadImage("bateau.jpg");
initialisation = true;
}

void placerj1()
{
background(0);
text("joueur 2",660,50);
text(" doit se retourner",660,70);
text("pendant que joueur1 place ses bateaux.",660,90);
text("Bateau 1/3 de 3 cases",660,110);
text("Placer avec les flèches puis entrée",660,130);
image(platbnavale,0,0);
image(viseur,75+58*(x-1),75+63*(y-1));

if (key != ENTER && placej1 == false)
{
if (key == CODED)
{
if (keyCode == RIGHT && x!=10)
{
x++;
keyCode=0;
}
if (keyCode == LEFT && x!=1)
{
x--;
keyCode=0;
}
if (keyCode == UP && y!=1)
{
y--;
keyCode=0;
}
if (keyCode == DOWN && y!=10)
{
y++;
keyCode=0;
}
}
}else{
if (0==0)
{
placej1 = true;
}else{
keyCode = 0;
}
}
if (placej1==true && mousePressed == false)
{
text("Cliquer sur les viseurs pour choisir",660,150);
text("la position du bateau",660,170);
if (x+2<=10)
{
image(viseur,75+58*(x+1),75+63*(y-1));
}
if (x-2>=1 )
{
image(viseur,75+58*(x-3),75+63*(y-1));
}
if (y+2<=10 )
{
image(viseur,75+58*(x-1),75+63*(y+1));
}
if (y-2>=1 )
{
image(viseur,75+58*(x-1),75+63*(y-3));
}
}
}

6 réponses

  1. Merci de ta réponse, je ne pense pas que le problème vienne des images lais plutot du tableau. Je pense quand meme que la clé est l. Merci bcp
    1. Modérateur
      "je ne pense pas que le problème vienne des images lais plutot du tableau"
      Dans le code que tu as mis il n'y a pas de tableau, et de toute façon l'exception ne correspond pas. La trace donne une erreur sur PApplet.displayable, une image est "displayable", pas un tableau...
    2. Ah oui cest vrai je l'avais enlevé le tableau^^
      donc jai rajouté ton petit bout de programme et... Nullpointerexception
      merci quand meme de ton aide
  2. Modérateur
    Bonjour,

    Quand on lit le wiki que je t'avais donné sur processing (Why do I get a NullPointerException?), tu devrais essayer de charger tes images dans la méthode setup(), c'est à dire avant la méthode init(), voir What are setup() and draw()?
    1. Jai essayé, ca ne fonctionne toujours pas... J'ai égalemment retiré toutes les images et ça n'y fait rien non plus...
      1. CA Y EST!!!!!

        Le problème venait du void init()
        Apres une soudaine illumination je l'ai renommé en void initiali() et tout fonctionne!!
        Encore merci pour ton aide!
        1. Modérateur
          Bonjour,

          Je n'avait pas vu le lien, mais effectivement la méthode init() existe déjà, et si tu veux la personnaliser il faut faire un super.init() pour conserver le comportement déjà mis en place, et non totalement l'écraser.

          Tu avais un exemple de redéfinition de la méthode init dans Undecorated frame

          Du coup je passe cette discussion en résolue.
          1. Modérateur
            Bonjour,

            Tu devrais regarder Why do I get a NullPointerException?

            Je pense qu'il faudrait en particulier vérifier que tes images sont bien chargées avec loadImage, sinon la valeur de tes PImage seront null et leur affichage plante.

            void showError(String title, String message)
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                message,
                title,
                javax.swing.JOptionPane.ERROR_MESSAGE);
            }
            
            void init() 
            { 
                viseur= loadImage("viseur.png");
                if (viseur==null)
                    showError("load image fails","Impossible de charger viseur.png");
            
                platbnavale = loadImage("plat.jpg"); 
                if (platbnavale ==null)
                    showError("load image fails","Impossible de charger plat.jpg");
            
                bateau = loadImage("bateau.jpg"); 
                if (bateau ==null)
                    showError("load image fails","Impossible de charger bateau.jpg");
            
                initialisation = true; 
            }

            La confiance n'exclut pas le contrôle