Da ich die Struktur meiner Java-Quellpakete geändert habe, möchten einige der Funktionen zum Öffnen von Dateien nicht mehr funktionieren. Ich habe einige Ressourcen (Symbol, Eigenschaftendateien usw.) von MyProject\res\
zu MyProject\src\res\
verschoben.Die im Quellpaketbaum gespeicherte Datei kann nicht geöffnet werden
Ich denke, ich sollte this.getClass().getResourceAsStream("icon.png")
statt Dateipfad Zeichenfolge verwenden, aber ich bin mir nicht sicher.
Hier ist, wie ich auf die Icon-Datei zuzugreifen, bevor ich die Ressourcen Standort ändern:
private final static String iconSourcePath = "file:res/icon/icon.png";
primaryStage.getIcons().add(new Image(iconSourcePath));
Gibt es eine Regel für den Zugriff auf Dateien in Java? Wenn sich die angeforderte Datei in der Quelldatei oder außerhalb befindet?
Edit: Dies ist die Lösung, die ich gefunden habe.
Ich fand den einfachsten Weg, immer absolute Pfade zu setzen, relativ zum Ordner src
.
Zum Beispiel in meinem Projekt habe ich diese Ordner-Hierarchie:
src
META-INF
MANIFEST.MF
res
icon
icon.png
lang
MessageBundle
MessageBundle_en.properties
MessageBundle_fr.properties
pref
AppProperties
Properties.properties
simulation
log
Console.java
views
settingsWindows
settingsWindows.fxml
SettingsWindows_Controller.java
simulation
simulation.fxml
Simulation_Controller.java
toolBar
toolBar.fxml
ToolBar_Controller.java
Simulation.java
Main.java
Wenn ich die icon.png
in der hinzufügen müssen SettingsWindows_Controller.java
(in JavaFX), werde ich dies tun, wie folgt aus:
private final static String iconSourcePath = "/res/icon/icon.png";
stage.getIcons().add(new Image(iconSourcePath));
Und wenn ich die toolBar.fxml
in jeder Datei geladen werden soll, werde ich das tun:
private final static String fxmlSourcePathToolBar = "/simulation/views/toolBar/toolBar.fxml";
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(fxmlSourcePathToolBar));
Mit dieser Methode funktioniert es im Debug-Modus (in der IDE) UND in der JAR-Datei.
Kann ein absoluter Pfad vom Root-Paket verwendet werden? Wie 'src/res/...', ohne die '../'? –
@ArmandDelessert: 'System.getProperty (" user.dir ")' hilft Ihnen, den Pfad für das aktuelle Projekt zu verlassen. nur ein Ordner hinter Ihrem Root-Paket. –
Es funktioniert nicht. Ich versuche mit 'getClass(). GetResource (fxmlSourceName)', eine gültige URL zu erhalten, aber es gibt immer 'null' zurück, wenn ich die JAR-Datei ausführe. Im Debug-Modus funktioniert es gut ... Ich verstehe nicht die Logik hinter dem Dateipfad/Name-Mechanismus. –