JavaFx Bilder-Pfad
Ich habe ein problem mit meinem Java-Klasse. Tatsächlich, der code ist korrekt, aber wenn ich auf die run-Taste gibt es eine Ausnahme verursacht, die dem Pfad des Bildes.
static Image currentBackground = new Image("Snake/Images/background_options.png", true);
Und die compiler Meldung:
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)
Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1100)
at javafx.scene.image.Image.<init>(Image.java:624)
at view.OptionsWindow.<clinit>(OptionsWindow.java:21)
... 3 more
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1092)
... 5 more
Prozess beendet mit exit-code 1
Kann jemand mir helfen?
- Die Nachricht explizit sagt
Invalid URL or resource not found
. Dies deutet darauf hin, dass Sie die angegebene url ist falsch. Bearbeiten können Sie Ihre Frage und fügen Sie die Projekt-Struktur? - Verwandte Frage: Wo kommt javafx.Szene.Bild.Bild(“Blume.png") suchen Blume.png?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Image
constructor erwartet die Angabe eines URL, keine Datei system Pfad. Vorausgesetzt, Sie sind die Bündelung dieses Bild als Teil Ihrer Anwendung, Sie müssen die Last, die von der gleichen Stelle wie Ihre Klassen geladen werden: wahrscheinlich eine jar-Datei in der endgültigen Bereitstellung, aber vielleicht aus dem Datei-system während der Entwicklung.Den Mechanismus, um eine URL repräsentiert eine Ressource, die Teil der Anwendung ist der Aufruf
getResource()
auf eineClass
oderClassLoader
.Die genaue Art und Weise, dies zu tun, hängt von Ihrem Projekt-Struktur, die Sie noch nicht gezeigt, aber zum Beispiel:
lädt das Bild aus einer Ressource, angegeben relativ zu der aktuellen Klasse, und
lädt das Bild aus einer Ressource angegeben relativ zu den class-path.
In der Veranstaltung, die Sie passieren eine
String
repräsentiert eine relative URL (also keine Regelung, wiefile:
,http:
oderjar:
), dann dieImage
Konstruktor wird die Suche auf die Klasse Pfad für die Ressource. In anderen Wortenentspricht
Scheint dies etwas unlogisch (für mich zumindest), so dass ich lieber immer eine URL angeben, ganz, oder zum abrufen von einer von
getClass().getResource()
oderFile.toURI().toURL()
als angemessen.contextClassLoader
. Die docs auch ausdrücklich fest, "Wenn Sie die übergebene Zeichenfolge ist keine gültige URL, sondern ein Pfad stattdessen das Bild gesucht, auf dem Klassenpfad in diesem Fall". Dies bedeutet, dassnew Image("Snake/Images/background_options.png");
ist vollkommen in Ordnung und wird geladen, das Bild genau so, wie es sollte, wie in deinem ersten Beispiel.new Image("Snake/Images/background_options.png")
ist immer noch auf Suche eine jar-Datei, wenn die Anwendung bereitgestellt wird, die Art und Weise. Es ist nur interpretiert es als relative URL (und relativ zu den class-path).getClass().getResource(...)
odergetClass().getClassLoader.getResource(...)
und Ihre Art und Weise, mit dem das Bild geladen ist falsch. Nun, mit zusätzlichen Informationen, ist es perfekt. +1