Ich versuche, eine CSS-Datei zu meiner JavaFX Appllication aufzunehmen, durch den folgenden Ausschnitt:zum Laden einer Datei von getClass() getResource() fehlschlägt, File() arbeitet
public void loadExternalCSS() {
System.out.println("CLASSPATH: "+System.getProperty("java.class.path"));
try{
skinCSS = getClass().getResource("css/default_skin.css").toExternalForm();
}
catch(Exception e){
System.err.println("Exception: " + e);
e.printStackTrace(System.err);
}
}
Welche Erträge, zur Laufzeit :
java.lang.NullPointerException
at
robotikosanomologitos.RobotikosAnomologitos.loadExternalCSS(RobotikosAnomologitos.java:529)
at robotikosanomologitos.RobotikosAnomologitos.start(RobotikosAnomologitos.java:491)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
Das seltsame ist, dass ein paar Zeilen über dieser Funktion habe ich eine kleine Funktion, die von einer properties
Datei liest.
public void readPropertiesFile() {
Properties props = new Properties();
InputStream is;
try {
File f = new File("properties");
is = new FileInputStream(f);
}
/* etcetera */
}
Das funktioniert wie ein Charme. Die properties
Datei wird an der Wurzel des Projektverzeichnisses, C:\~my_projects_folder~\RobotikosAnomologitos
Nach der Suche um eine Lösung, ich sah, dass getClass().getResource()
versucht, eine Ressource in der Classpath zu finden. Ich habe versucht, den Klassenpfad bei jedem Lauf zu drucken, und ich bekomme: RobotikosAnomologitos\dist\run125323585\RobotikosAnomologitos.jar
was logisch genug ist.
Nachdem ich in diesem temporären Ordner während der Ausführung des Programms nachgesehen habe, kann ich weder einen css-Ordner noch eine css-Datei finden.
Aber die Datei befindet sich tatsächlich in meinem Arbeitsprojektverzeichnis, unter RobotikosAnomologitos\css\default_skin.css
. Aus irgendeinem Grund wird es zur Laufzeit nicht in den Classpath eingefügt, was dazu führt, dass getResource()
bei der Suche Null zurückgibt.
Irgendwelche Ideen, wie man es einbaut?
EDIT: habe ich vergessen zu erwähnen, dass ich auch css/default_skin.css
unter dem src
Paket platziert haben, und zeigt in Netbeans' -Paket Baum (src/css/default_skin.css
).
In der gleichen Weise habe ich einige Grafiken, die unter src/graphics/
befinden, die von getClass().getResourceAsStream()
in Ordnung geladen werden. Was mich auch verwirrt, warum die CSS-Datei nicht gefunden werden kann. Vielleicht wird es nicht in der jar
kompiliert?
Versuchen Sie nicht, Ressourcen im Klassenpfad als Dateien zu verwenden! Dies wird offensichtlich nicht funktionieren. Es gibt keine 'Datei' innerhalb von Gläsern zur Laufzeit. Verwenden Sie Ressourcen. – fge
@DimitrisSfounis Probieren Sie es mit 'getClass(). GetResource ("/css/default_skin.css "). ToExternalForm();' oder 'getClass(). GetClassLoader(). GetResource (" css/default_skin.css ") .toExternalForm(); ' –
@MadhusudanaReddySunnapu Versuchte beide, keine Würfel. –