Pfadangabe

Die Namen ("Pfadangaben") von Class#getResource() bzw. Class#getResourceAsStream bezeichnen Ressourcen, die vom jeweiligen ClassLoader geladen werden. Sie beziehen sich also nicht auf das Dateisystem sondern auf die "Pakete" des Programms. Werden sie ohne führenden '/' angegeben, wird davon ausgegangen, dass sich die Ressource im selben Paket wie die Klasse befindet, für getResource() bzw. getResourceAsStream() aufgerufen wurde.
Das heißt ich müsste alle betreffenden FXML-Dateien im selben Package liegen haben wie die Ansichtsklasse fürs Hauptmenü? Das macht ja wenig Sinn, bezogen auf die Übersichtlichkeit. Immerhin bauen noch 5 andere Scene auf das Hauptmenü auf. Dann kann ich ja auch gleich alles in ein Package legen und spare mit die Aufteilung.

Oder gibt es noch andere Methoden wie ich eine FXML-Datei zuweisen kann?

VG
Marco
 
Das heißt ich müsste alle betreffenden FXML-Dateien im selben Package liegen haben wie die Ansichtsklasse fürs Hauptmenü?
Nein. Du kannst Ressourcen innerhalb Deines Projekts ablegen, wo Du willst. Wenn Du allerdings keinen "absoluten" Pfad angibst, wird von dem Package ausgegangen., in dem sich die Klasse befindet, deren getResource()-Methode Du aufgerufen hast.

Das macht ja wenig Sinn, bezogen auf die Übersichtlichkeit. Immerhin bauen noch 5 andere Scene auf das Hauptmenü auf.
Erstens kann ich nichts falsches daran erkennen, zusammengehörige Dinge auch zusammen abzulegen. Zweitens kannst Du die Ressourcen theoretisch in anderen Packages ablegen und drittens muss man zwischen Übersetzungs- und Laufzeit unterscheiden. Zur Übersetzungszeit können die Ressourcen theoretisch überall auf dieser Welt liegen, so lange das Buildsystem dafür sorgt, dass es am Ende ins richtige Package kommt.

Bei Maven beispielsweise werden Ressourcen und Quelltext standardmäßig in getrennten Verzeichnisbäumen gespeichert. Dort findet man Quelltexte unter src/main/java und Ressourcen unter src/main/resources. Hast Du also eine Klasse org.javaforum.app.Main und lädt diese Klasse eine Ressource via getClass().getResource("logo.png"), dann würde man den Quelltext unter src/main/java/org/javaforum/app/Main.java ablegen und die Ressource unter src/main/resources/org/javaforum/app/logo.png. Im am Ende gebauten Jar-File findet man beide Dateien im Jar unter org/javaforum/app.

Lädt die Main-Klasse zusätzlich z. B. getClass().getResource("/i18n/bundle.properties"), dann müsste man die Datei bundle.properties unter src/main/resources/i18n/bundle.properties speichern, damit sie gefunden wird.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben