web-dev-qa-db-ger.com

Java getClass (). GetResource ("file") führt zur NullPointerException

Ich folge dem zetcode Snake Java Games Tutorial und bekomme immer diese Fehlermeldung:

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)

Ich habe eigentlich nur den Code kopiert und eingefügt, um zu sehen, wie er funktioniert. Sie sind auch in den richtigen Paketen. Aber wenn ich versuche, es auszuführen, ende ich immer mit diesem Fehler.

13
kapitanluffy

Das Image sollte sich in demselben Paket (Ordner in OS-Begriffen) befinden wie die kompilierte Klasse. Prüfen Sie, ob Sie .class und .png im selben Ordner haben. Wenn nicht, können Sie in getResource(..) Klassenpfad-relative Pfade verwenden, indem Sie mit / beginnen.

12
Bozho

Verwenden Sie System.out.println(System.getProperty("Java.class.path"));, um den Speicherort Ihrer .class-Datei zu ermitteln, und legen Sie die Bilder in diesem Ordner ab.

5
Rohit Deshmukh

Versuche dies:

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

Stellen Sie sicher, dass sich das Image im selben Ordner wie die Java-Datei befindet.

5
Harry Joy

Es ist generell riskant, Ressourcen über relative Pfade zu laden. Ich würde immer empfehlen, absolute Pfade zu verwenden

 /ball.png

wenn sich das Bild im Stammverzeichnis Ihres Klassenpfads befindet, oder fügen Sie dem Speicherort einen Pfad hinzu.

3
MeBigFatGuy

Sie müssen die Bilddatei (ball.png) in Ihren Klassenpfad einfügen. Weitere Informationen finden Sie unter der Javadoc .

1
jumperchen

Gehen Sie zu Projekt> Reinigen in Eclipse. Dadurch wird der Paket-Explorer aktualisiert und Sie werden diesem Problem nicht mehr begegnen.

0
vara prasad

Sie können nur den Pfad Ihres Bildes verwenden. Ich denke, das wird Ihnen helfen: Verwenden Sie Folgendes:

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

Hinweis: C:\\Users\\ranig\\My\\spaceinvaders\\ball.png ist der gesamte Pfad des Bildes ball.png.

an Stelle von:

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

Hinweis: Wenn Sie nur Schlangencode ausprobieren und nur Ausgabe erhalten möchten. 

0
abcd

Möglicherweise müssen Sie die Datei zu Ihren Build-Ressourcen hinzufügen, etwa wie folgt:

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

0
maphysics

wenn sich die Ressource in Ihrem Klassenpfad befindet, sollten Sie "this.getClass (). getClassLoader (). getResource (" ball.png ")" ausprobieren. Damit der eigentliche Code funktioniert, muss sich der ball.png an dem Speicherort befinden, an dem sich Ihre .class-Datei befindet (d. H. Innerhalb des Pakets).

0
Anil G

Ich werde es dir einfach machen. Hier ist ein Beispiel:

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

hier ist "bug1.png" die Ressource, und wenn sie nicht verfügbar ist, kann es zu Fehlern kommen, wie Sie hier beschrieben haben.

Importieren Sie ein Bild in dasselbe Verzeichnis, in dem sich Ihr Programm befindet. 

Sie können auch den gesamten Pfad angeben

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