Erreur Java !!

Résolu/Fermé
cbnla Messages postés 3 Date d'inscription lundi 9 octobre 2017 Statut Membre Dernière intervention 14 février 2018 - Modifié le 14 févr. 2018 à 08:31
cbnla Messages postés 3 Date d'inscription lundi 9 octobre 2017 Statut Membre Dernière intervention 14 février 2018 - 14 févr. 2018 à 16:12
Bonjour,
J'ai essayé de rouler mon programme java bien que ça compile bien mais ça m'affiche aprés l'avoir roulé quelque chose du genre :
Exception in thread "main" java.lang.NullPointerException
at Cell.setIcon(App.java:30)
at Cell.<init>(App.java:25)
at App.<init>(App.java:46)
at App.main(App.java:58)


Je sais pas vraiment comment résoudre ce problème et j'ai vraiment besoin d'aide !
voici mon code :

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;

class Cell extends JButton {

    private static final int NUM_COLOURS = 3;

    private ImageIcon[] icons;
    private int type;

    public Cell() {
 ImageIcon[] icons;

 icons = new ImageIcon[NUM_COLOURS];
 for (int i=0; i<NUM_COLOURS; i++) {
     icons[i] = new ImageIcon("data/ball-" + Integer.toString(type) + ".png");
 }
 
     this.type = 0;
     setBackground(Color.WHITE);
     setIcon();
     setBorderPainted(false);
    }

    private void setIcon() {
 setIcon(icons[type]);
    }

    public void update() {
     type = type + 1;
     setIcon();
    }
    
}

public class App extends JFrame implements ActionListener {

    private Cell myCell;
    
    public App() {
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 myCell = new Cell();
 myCell.addActionListener(this);
 add(myCell);
 pack();
 setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
 myCell.update();
    }
    
    public static void main(String[] args) {
 new App();
    }
    
}

Merci !!
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
14 févr. 2018 à 08:42
Bonjour,

L'erreur te donne plusieurs informations, à commencer par le type d'erreur en elle même
NullPointerException
, et laligne de code sur laquelle ça s'est produit
at Cell.setIcon(App.java:30)
. Donc tu peux aller voir la documentation de l'erreur et regarder à quoi ça correspond dans le code.

private void setIcon() {
    setIcon(icons[type]); // ligne 30 : NullPointerException
}

https://docs.oracle.com/javase/9/docs/api/java/lang/NullPointerException.html
Thrown when an application attempts to use null in a case where an object is required. These include:
  • Calling the instance method of a null object.
  • Accessing or modifying the field of a null object.
  • Taking the length of null as if it were an array.
  • Accessing or modifying the slots of null as if it were an array.
  • Throwing null as if it were a Throwable value.

Ici, c'est ton
private ImageIcon[] icons;
(ligne 12) qui vaut null.

Tu pensais l'avoir initialisé ligne 18 avec
icons = new ImageIcon[NUM_COLOURS];
mais comme tu as déclaré une variable locale juste avant (
ImageIcon[] icons;
ligne 16), alors c'est cette variable locale qui est initialisée, pas l'attribut privé.

Il faudrait que tu supprimes la variable locale ligne 16, elle ne sert à rien, ce dont tu as besoin c'est uniquement de l'attribut privé de la ligne 12...
0
cbnla Messages postés 3 Date d'inscription lundi 9 octobre 2017 Statut Membre Dernière intervention 14 février 2018
14 févr. 2018 à 16:12
Pour l'erreur du Cell.setIcon, j'ai regardé tout le code mais je ne vois rien
Je me suis dit que peut être de nouveaux yeux pourraient peut être le voir facilement...
Et merci, tu as bel et bien raison à propos de la variable locale !!
J'aurai pas vu ça...
0