Java: NullPointerException von class.getResource( … )

Lesezeit: 5 Minuten

Java NullPointerException von classgetResource
Martin Tuskevicius

Ich schrieb eine kleine Anwendung und als ich versuchte, ein ImageIcon zu erstellen, bekam ich immer eine Ausnahme. Die Ausnahme wurde durch diese Codezeile verursacht:

prayerLevel.setIcon(new ImageIcon(getClass().getResource("/icons/icon_prayer.png")));

Jetzt existiert in meinem Programm der Ordner /icons/. Ich weiß nicht, ob es einen Unterschied macht, aber die Klassendatei befindet sich in einem Paket, während sich der Symbolordner im Projektordner befindet (wenn Sie den Ordner bin und src sehen würden).

Ich habe mich ein wenig umgesehen und konnte keine Lösung finden, die mir helfen könnte, das Problem zu lösen. Vielleicht kann jemand von euch helfen?

Bearbeiten: Jemand hat nach meiner Ordnerhierarchie gefragt:

Ordnerhierarchie

Ich weiß, dass sich die Klassendatei nicht im selben Ordner wie die Symbole befindet, aber ich habe Anwendungen erstellt, bei denen ich Dateien aus einem anderen Ordner laden musste und /folder/ immer funktionierte.

Bearbeiten 2:

System.out.println(getClass().getResource("/icons/icon_prayer.png") == null);

Druckt wahr.

  • Wie sieht die Ordnerhierarchie aus? Wenn Sie sagen, dass der /icons-Ordner existiert, wo genau ist er?

    – posdef

    16. Mai 2011 um 20:36 Uhr

  • Sie sollten wahrscheinlich die relevante Fehlermeldung – insbesondere den Stack-Trace – angeben, da dies uns zeigt, wo genau das Problem auftritt.

    – Nate W.

    16. Mai 2011 um 20:49 Uhr

  • Ich habe herausgefunden, warum ich den NullPointer bekomme, aber jetzt kann ich nicht herausfinden, warum class.getResource( … ) null ist. Die Datei „icon_prayer.png“ befindet sich im Ordner „icons“.

    – Martin Tuskevicius

    16. Mai 2011 um 20:52 Uhr


  • befindet sich der Symbolordner im Klassenpfad, wenn die Anwendung ausgeführt wird?

    – matt b

    16. Mai 2011 um 23:48 Uhr

  • Die NPE ist nicht von Class.getResource(), im Gegensatz zu Ihrem Titel. Es ergibt sich aus Ihrem Versäumnis, das Ergebnis zu überprüfen.

    – Benutzer207421

    11. November 2016 um 9:46 Uhr

1647109028 794 Java NullPointerException von classgetResource
Nate W.

Ich glaube, die NPE wird aus der Bahn geworfen ImageIcon Konstrukteur als getResource kehrt zurück null.

Versuche Folgendes:

getClass().getClassLoader().getResource("/icons/icon_prayer.png")

Oder:

ClassLoader.getSystemResource("/icons/icon_prayer.png")

  • Ich habe getClass().getClassLoader().getResource(“/icons/icon_prayer.png”) ausprobiert, keine Änderung

    – Martin Tuskevicius

    16. Mai 2011 um 20:44 Uhr


  • @Martin Tuskevicius: Ich habe eine weitere Abrufmethode hinzugefügt – probieren Sie es aus!

    – Nate W.

    16. Mai 2011 um 21:03 Uhr

Java NullPointerException von classgetResource
posdef

Soweit ich weiss getResource() wird nach Orten bekannter Ressourcen suchen, mit anderen Worten, wenn der Ordner /icons/ nicht als Ressourcenordner gesehen wird, wird es nicht so sein, wie Sie es erwartet hatten. Dazu gibt es meines Wissens zwei Möglichkeiten:

1) Stellen Sie den Symbolordner als Ressource für die Anwendung ein, die Sie dann verwenden können getResource() zum Beispiel
URL css_url = getClass().getResource("/resource/style.css");

Weitere Informationen zu dieser Option finden Sie unter http://lj4newbies.blogspot.com/2008/03/using-classgetresource-load-resource.html

2) Holen Sie sich das Symbol als normale Datei, ohne es zu verwenden getResource() Methode. Dies wird tatsächlich empfohlen Swing-Tutorials in der Sun/Oracle-eigenen Dokumentation .

Im Allgemeinen stellen Anwendungen ihren eigenen Satz von Bildern bereit, die als Teil der Anwendung verwendet werden, wie es bei den Bildern der Fall ist, die von vielen unserer Demos verwendet werden. Sie sollten die Methode Class getResource verwenden, um den Pfad zum Bild zu erhalten. Dadurch kann die Anwendung überprüfen, ob das Bild verfügbar ist, und eine vernünftige Fehlerbehandlung bereitstellen, wenn dies nicht der Fall ist. Wenn das Bild nicht Teil der Anwendung ist, sollte getResource nicht verwendet werden und der ImageIcon-Konstruktor wird direkt verwendet. Zum Beispiel:

ImageIcon icon = new ImageIcon(“images/middle.gif”, “ein hübscher, aber bedeutungsloser Splat”);

Hoffe das hilft, viel Glück!

Alter Thread, aber da ich gerade auf ein ähnliches Problem gestoßen bin …

Ich verwende Eclipse und habe eine Datei mit Systembefehlen (cp). Eclipse warf jedoch a NullPointerException weil ich den Ordner “Ressourcen” nicht aktualisiert habe. Die Datei war also da, aber Eclipse hat sie nicht gesehen.

Also in Eclipse: “Package Explorer” -> “Ressourcen” -> Maus-Rechtsklick -> Aktualisieren. Dies hat es für mich behoben.

  • Gleicher Fix hier für IntelliJ IDEA: Build-> “Rebuild project” hat den Zweck erfüllt.

    – Horkrux

    15. Dezember 2021 um 19:45 Uhr

1647109029 294 Java NullPointerException von classgetResource
Valencia Starr

Ich habe meine Musik, Bilder usw. zu einem Ordner hinzugefügt, der dem Erstellungspfad hinzugefügt wurde. Dann habe ich einfach verwendet

URL url="CurrentClass".class.getClassLoader().getResource("media file name not the path");
setIconImage(new ImageIcon(url.getPath()).getImage());

um das Bildsymbol festzulegen.

Das einzige, was einen werfen kann NullPointerException in dieser Codezeile ist die erste .was bedeutet, dass prayerLevel ist Null.

  • Das ist nicht wahr. Der Konstrukteur ImageIcon(URL) löst eine NPE aus, wenn die angegebene URL null ist, da die Implementierung einfach so ist: public ImageIcon(URL location) { this(location, location.toExternalForm()); }

    – Nate W.

    16. Mai 2011 um 20:41 Uhr

  • Aber dann wird die NullPointerException nicht (direkt) durch verursacht Das Zeile, sondern durch eine Zeile des Konstruktors.

    – Roland Illig

    16. Mai 2011 um 20:45 Uhr


  • Das ist ein strittiger Punkt. In jedem Fall wäre dies klar gewesen, wenn das OP den Stacktrace enthalten hätte. Hinweis an OP: Fügen Sie die entsprechende Fehlermeldung hinzu!

    – Nate W.

    16. Mai 2011 um 20:48 Uhr

  • Die als Argument für den Konstruktor bereitgestellte URL ist null.

    – Martin Tuskevicius

    16. Mai 2011 um 20:50 Uhr

  • Du hast recht, daher die NPE von der ImageIcon Konstrukteur.

    – Nate W.

    16. Mai 2011 um 21:04 Uhr

  • Das ist nicht wahr. Der Konstrukteur ImageIcon(URL) löst eine NPE aus, wenn die angegebene URL null ist, da die Implementierung einfach so ist: public ImageIcon(URL location) { this(location, location.toExternalForm()); }

    – Nate W.

    16. Mai 2011 um 20:41 Uhr

  • Aber dann wird die NullPointerException nicht (direkt) durch verursacht Das Zeile, sondern durch eine Zeile des Konstruktors.

    – Roland Illig

    16. Mai 2011 um 20:45 Uhr


  • Das ist ein strittiger Punkt. In jedem Fall wäre dies klar gewesen, wenn das OP den Stacktrace enthalten hätte. Hinweis an OP: Fügen Sie die entsprechende Fehlermeldung hinzu!

    – Nate W.

    16. Mai 2011 um 20:48 Uhr

  • Die als Argument für den Konstruktor bereitgestellte URL ist null.

    – Martin Tuskevicius

    16. Mai 2011 um 20:50 Uhr

  • Du hast recht, daher die NPE von der ImageIcon Konstrukteur.

    – Nate W.

    16. Mai 2011 um 21:04 Uhr

994780cookie-checkJava: NullPointerException von class.getResource( … )

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy