web-dev-qa-db-fra.com

Java getClass (). GetResource ("fichier") mène à NullPointerException

Je suis le tutoriel sur les jeux Java Snake zetcode et je reçois toujours cette erreur:

ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));
ball = iid.getImage();

Exception in thread "main" Java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at snake2.Board.<init>(Board.Java:52)
    at snake2.Snake.<init>(Snake.Java:10)
    at snake2.Snake.main(Snake.Java:22)

En fait, je viens de copier et coller le code pour voir comment cela fonctionne. Ils sont dans les bons paquets aussi; mais quand j'essaye de l'exécuter, je finis toujours avec cette erreur.

13
kapitanluffy

L'image doit être dans le même package (dossier en termes de système d'exploitation) que la classe compilée. Vérifiez si vous avez à la fois .class et .png dans le même dossier. Sinon, vous pouvez utiliser les chemins relatifs aux chemins de classes dans getResource(..), en commençant par /

12
Bozho

Essayez d’utiliser System.out.println(System.getProperty("Java.class.path")); pour trouver l’emplacement de votre fichier .class et placez les images dans ce dossier.

5
Rohit Deshmukh

Essaye ça:

ImageIcon iid = new ImageIcon(this.getClass()
                  .getClassLoader().getResource("ball.png"));
ball = iid.getImage();

Assurez-vous que l'image se trouve dans le même dossier que le fichier Java.

5
Harry Joy

Il est généralement risqué de charger des ressources en utilisant des chemins relatifs, je recommanderais toujours d’utiliser des chemins absolus, alors

 /ball.png

si l'image se trouve à la racine de votre chemin de classe, ou ajoutez un chemin à l'emplacement.

3
MeBigFatGuy

Vous devez mettre le fichier image (ball.png) dans votre chemin de classe. Plus de détails, s'il vous plaît jeter un oeil à le Javadoc .

1
jumperchen

Allez dans projet> nettoyer dans Eclipse, cela actualiserait le paquet Explorer et vous ne feriez plus face à ce problème.

0
vara prasad

Vous ne pouvez utiliser que le chemin de votre image. Je pense que cela vous aidera: Utilisez ceci:

ImageIcon iid = new ImageIcon("C:\\Users\\ranig\\My\\spaceinvaders\\ball.png");

Remarque: C:\\Users\\ranig\\My\\spaceinvaders\\ball.png est le chemin complet de l'image ball.png.

au lieu de cela:

ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));

Remarque: Si vous voulez uniquement essayer le code de serpent et obtenir uniquement une sortie. 

0
abcd

Vous devrez peut-être ajouter le fichier à vos ressources de génération, à peu près comme ceci:

<build>
    <resources>
        <resource>
            <directory>path\to\resources</directory>
            <includes>
                <include>ball.png</include>
            </includes>
        </resource>
    </resources>

0
maphysics

si la ressource est dans votre chemin de classe, vous devriez alors essayer "this.getClass (). getClassLoader (). getResource (" ball.png ")". Pour que votre code fonctionne, ball.png doit être à l’emplacement où se trouve votre fichier .class (c’est-à-dire à l’intérieur du paquet).

0
Anil G

Je vais le rendre simple pour vous. Voici un exemple:

Icon bug = new ImageIcon(getClass().getResource("bug1.png"));

ici "bug1.png" est la ressource et si elle est indisponible, cela peut provoquer une erreur comme vous en avez discuté ici.

Importez une image dans le même répertoire que votre programme. 

Vous pouvez également lui donner un chemin complet

ImageIcon(getClass().getResource("C://me/file/bug1.png"));
0
Ali Baba