IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Erreur d'une ImageIcon


Sujet :

Composants Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Par défaut Erreur d'une ImageIcon
    Bonjour,

    J'ai quelque soucis au niveau de ma fonction ImageIcon. Lorsque je lance le programme j'ai l'erreur suivante.

    Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    J'ai beau chercher d'ou vient l'erreur, je trouve absolument pas. Voici le bout de code de l'ImageIcon :

    ImageIcon image = new ImageIcon(this.getClass().getResource("Image/V1.jpg"));
    v1= image.getImage();
    Pour information, l'image est stocké dans un source folder Image contenant toute mes images.

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour Blackerreip
    Vérifie que ton répertoire image est bien dans le répertoire ou est ta classe.
    Vérifie bien les Majuscules/Minuscules
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Par défaut
    En ce qui concerne les majuscules ou minuscules il n'y a pas d'erreur.

    Pour le placement du répertoire, j'ai fais plusieurs essaie et j'obtient toujours cette erreur, avec le message d'erreur il semble logique que le soucis vienne de la et pourtant ...

  4. #4
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    bonjour,

    si le dossier de tes images se trouve dans le même dossier que tes sources : ajoute un / devant le nom du dossier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageIcon image = new ImageIcon(this.getClass().getResource("/Image/V1.jpg"));

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Par défaut
    J'ai une erreur différente du coup :

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Shmup.Ecran.paint(Ecran.java:51)
    Ligne 50 et 51 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Graphics2D g2 = (Graphics2D)g;
            g2.drawImage(vaisseau.getVaisseau(), vaisseau.getX(), vaisseau.getY(), this);
    Enfin d'après ce que j'ai compris, il ne trouve toujours pas l'image du coup le v1.getLogo() est nul.

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    on ne voit pas trop le lien entre tes variables image, v1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ImageIcon image = new ImageIcon(this.getClass().getResource("Image/V1.jpg"));
    v1= image.getImage();
    et vaisseau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Graphics2D g2 = (Graphics2D)g;
            g2.drawImage(vaisseau.getVaisseau(), vaisseau.getX(), vaisseau.getY(), this);
    tu pourrais nous donner plus de code ?

    en plus tu nous parles de v1.getLogo()

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Par défaut
    Pas de soucis, je me suis un peu mélanger avec les changement de variable qui était censé rendre plus clair.

    Le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      public Vaisseau() {
    	      ImageIcon image = new ImageIcon(this.getClass().getResource("/Image/V1.jpg"));
    	      vaisseau= image.getImage();
    	       x = 40;
    	       y = 60;
    	    }
    Le fonction paint dans ma classe d'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      public void paint(Graphics g) {
     
            super.paint(g);
     
            Graphics2D g2 = (Graphics2D)g;
            g2.drawImage(vaisseau.getLogo(), vaisseau.getX(), vaisseau.getY(), this);
     
            Toolkit.getDefaultToolkit().sync();
            g.dispose();
        }

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    je dirais plutôt que ton objet vaisseau est null à la ligne 51...

    La stacktrace que tu nous donne n'étant pas complète, on ne peut dire grand chose...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Par défaut
    Je vais mettre les deux classe entière dans ce cas :

    Classe écran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
     
    public class Ecran extends JFrame implements ActionListener{
     
    	private Vaisseau vaisseau;
     
    	public Ecran() {
            addWindowListener(new WindowAdapter() {
                    public void windowClosing(WindowEvent e) {
                            System.exit(0);
                    }});
     
            addKeyListener(new ToucheListener());
            setSize(new Dimension(400,500));
            setFocusable(true);
     
            final Vaisseau vaisseau = new Vaisseau();
     
            setVisible(true);
     
    	}
     
     
        public void paint(Graphics g) {
     
            super.paint(g);
     
            Graphics2D g2 = (Graphics2D)g;
            g2.drawImage(vaisseau.getLogo(), vaisseau.getX(), vaisseau.getY(), this);
     
            Toolkit.getDefaultToolkit().sync();
            g.dispose();
        }
     
    	public void actionPerformed(ActionEvent arg0) {
     
    		ArrayList arme = vaisseau.getArme();
     
    		for (int i=0; i<arme.size() ; i++)
     
    		vaisseau.deplacer();
    		repaint();
     
    	}
     
    	public class ToucheListener extends KeyAdapter {
     
    		public void KeyReleased(KeyEvent arg0){
    			vaisseau.relacheTouche(arg0);
    		}
     
    		public void KeyPressed(KeyEvent arg0){
    			vaisseau.appuieTouche(arg0);
    		}
     
    	}
     
     
    	public static void main (String[] args){
    		new Ecran();
    	}
    }
    La deuxième :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    public class Vaisseau extends ObjetVolant{
     
     
    	private int dx, dy; // Variable de déplacement du vaisseau
    	private int x, y; // Variable de coordonnée du vaisseau
    	private Image logo; // Variable pour l'image du vaisseau
    	private ArrayList armes; //Liste des armes du vaisseau
     
     
    	  public Vaisseau() {
    	      ImageIcon image = new ImageIcon(this.getClass().getResource("/Image/V1.jpg"));
    	      logo= image.getImage();
    	       x = 40;
    	       y = 60;
    	    }
     
     
    	public int getX() {
    		return x;
    	}
     
    	public int getY() {
    		return y;
    	}
     
    	public Image getLogo() {
    		return logo;
    	}
     
    	public ArrayList getArme(){
    		return armes;
    	}
     
    	// Méthode permettant de déplacer un vaisseau
    	protected void deplacer(){
    		x = x + dx;
    		y = y + dx;
    	}
     
        protected void tirer() {
    		armes.add(new Missile(x,y));
     
    	}
     
     
    	public void appuieTouche(KeyEvent arg0) {
     
    		int touche = arg0.getKeyCode();
     
    		if (touche == KeyEvent.VK_SPACE) {
    	            tirer();
    	    }
     
            if (touche == KeyEvent.VK_LEFT) {
                dx = -1;
            }
     
            if (touche == KeyEvent.VK_RIGHT) {
                dx = 1;
            }
     
            if (touche == KeyEvent.VK_UP) {
                dy = -1;
            }
     
            if (touche == KeyEvent.VK_DOWN) {
                dy = 1;
            }
    	}
     
     
     
        public void relacheTouche(KeyEvent arg0) {
                int touche = arg0.getKeyCode();
     
                if (touche == KeyEvent.VK_SPACE) {
    	            tirer();
    	        }
     
                if (touche == KeyEvent.VK_LEFT) {
                    dx = 0;
                }
     
                if (touche == KeyEvent.VK_RIGHT) {
                    dx = 0;
                }
     
                if (touche == KeyEvent.VK_UP) {
                    dy = 0;
                }
     
                if (touche == KeyEvent.VK_DOWN) {
                    dy = 0;
                }
            }
    }

  10. #10
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Effectivement, ta variable vaisseau est bien nulle dans le scope de la méthode paint.

    Cela vient du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final Vaisseau vaisseau = new Vaisseau();
    que tu fais dans ton constructeur.
    Cette ligne crée un objet vaisseau qui n'existera que lors de l'exécution du constructeur, et n'instancie en aucun cas ton attribut de classe vaisseau.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Par défaut
    Le constructeur est celui la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     public Vaisseau() {
    	      ImageIcon image = new ImageIcon(this.getClass().getResource("/Image/V1.jpg"));
    	      logo= image.getImage();
    	       x = 40;
    	       y = 60;
    	    }
    C'est donc toujours le soucis du ImageIcon si j'ai bien compris, non ?

  12. #12
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Non, le problème est dans le constructeur de ta classe Ecran.
    La ligne que j'indique en fait partie.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Par défaut
    Problème résolu, il s'agissait bien de l’instanciation du vaisseau de la classe écran. Une erreur assez simpliste en soit.

    En tout cas merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rediriger les erreurs d'une commande
    Par GLDavid dans le forum Langage
    Réponses: 9
    Dernier message: 10/11/2005, 22h03
  2. Réponses: 4
    Dernier message: 14/06/2004, 17h18
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 16h45
  4. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 09h15
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 22h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo