2016-09-21 1 views
0

Ich habe versucht, ein Bild-Objekt wie folgt zu erstellen:Kann nicht ein Bildobjekt mit Relativer Dateipfad Konstrukt ohne die Verwendung von Datei: Präfix

Image img = new Image("images/jack.png"); 

oder

Image img = new Image("jack.png"); 

oder /jack.png oder /images/jack.png usw.

Ich habe das Arbeitsverzeichnis mit System.getProperty("user.dir") nachgeschlagen und es ist in der Tat, wo ich meine Bilddatei. Wenn ich file: Präfix verwenden, es funktioniert, etwa so:

Image img = new Image("file:images/jack.png"); 

Jedoch ist es auch ohne sie benutzen funktionieren soll. Im Lehrbuch ist es ohne file: gemacht. Ich habe andere Codes gesehen, die ohne sie funktionieren.

Am Ende eines Bündels von gekettet Ausnahmen, heißt es:

Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found

I Quellcode von OpenJDK und ich konnte auch versucht, alles zu lesen, herauszufinden, da viele Methoden nativer waren und von dem, was ich verfolgt habe ich nicht verstanden, wie es nicht funktioniert hat. Außerdem kann ich Dateien auf die gleiche Weise erstellen, ich kann einfach keine Bilder erstellen. Zum Beispiel funktioniert das:

File file = new File("fileName.txt"); 

Was verursacht dieses Problem, was soll ich tun, um es zu beheben?

Ich benutze NetBeans, wenn das wichtig ist.

+0

Warum legen Sie Ihr Bild nicht in den Ressourcenordner des Projekts. Dann könntest du in der Lage sein, mit relativen Pfaden zu arbeiten –

+0

@ArthurEirich Weißt du, warum, wie ich es mache, nicht funktioniert? – Haggra

Antwort

0
File file = new File("name.txt"); 

erstellt irgendwo eine Datei. Die vorhandene Datei wird nicht gelesen, während

Image image = new Image("pathToImage.png"); 

versucht, das vorhandene Bild zu lesen. Um ein irgendwo gespeichertes Bild lesen zu können, benötigen Sie entweder den absoluten Pfad, der das Protokoll benötigt (http, file, ftp usw.) oder Sie setzen Ihr Bild in das 'bekannte' Verzeichnis, wie das Ressourcenverzeichnis Ihres Projekts . Sagen Sie, Sie haben Ihre Java-Quellen unter src/main/java. Das Ressourcenverzeichnis könnte src/main/resources lauten. Setzen Sie Ihr Bild dort und versuchen Sie, mit relativen Pfad relativ zu src/main/resources zu arbeiten.

2

Beachten Sie, dass System.getProperty("user.dir") das Arbeitsverzeichnis nicht zurückgibt. Es gibt das Benutzerverzeichnis zurück.
Ein Pfad relativ zum Arbeitsverzeichnis kann mithilfe eines relativen Dateipfads im File-Konstruktor angegeben werden. Es ist jedoch eine schlechte Übung, sich auf das Arbeitsverzeichnis zu verlassen. Das Starten der Anwendung von NetBeans führt dazu, dass das Arbeitsverzeichnis das Projektverzeichnis ist. Dies ist jedoch nicht der Fall, wenn es auf andere Weise gestartet wird.

Bilder, die Sie in Ihrer Anwendung benötigen, sollten daher in das Glas aufgenommen werden.
In diesem Fall können Sie das Bild URL über abrufen. (Umwandeln in String mit toExternalForm().

)

Wenn Sie eine File haben, die eine Bilddatei verweist, können Sie die File Instanz verwenden, um eine URL zu bekommen:

File file = ... 
String urlString = file.toURI().toURL().toExternalForm(); 

Diese URLs verwendet werden, mit dem Image Konstruktor kann.


Beachten Sie, dass

File file = new File("fileName.txt"); 

schafft keine eine Datei. Es repräsentiert nur einen Dateipfad. Diese Datei existiert möglicherweise nicht. Durch einfaches Aufrufen des File-Konstruktors wird kein neuer Konstruktor erstellt.

Verwandte Themen