Java: NullPointerException von class.getResource( … )
Lesezeit: 5 Minuten
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:
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:
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.
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
Nate W.
Ich glaube, die NPE wird aus der Bahn geworfen ImageIcon Konstrukteur als getResource kehrt zurück null.
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
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");
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
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
9947800cookie-checkJava: NullPointerException von class.getResource( … )yes
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