我正在开发一个JavaFX应用程序,我目前正在进行资源管理。我实现了创建实用程序静态类,为我的应用程序提供字体,图像等。 但我坚持加载CSS。
My Util静态类定义:
public static ArrayList<String> getStyleSheets() {
return listAbsoluteFileNames(cssDir);
}
public static ArrayList<String> listAbsoluteFileNames(File dir) {
File[] listOfFiles = dir.listFiles();
ArrayList<String> list = new ArrayList<String>();
for(int i=0 ; i<listOfFiles.length ; i++) {
if(listOfFiles[i].isFile())
list.add(listOfFiles[i].getAbsolutePath());
}
return list;
}
其中cssDir
是一个File对象,用于定义包含我的样式表的目录“css”。我想加载这些文件,但是我遇到了一些错误。
在我的Application子类中:
stage.getScene().getStylesheets().addAll(Resources.getStyleSheets());
生成的错误:
WARNING: com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged Resource "C:\Users\...\resources\css\main_menu.css" not found.
WARNING: com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged Resource "C:\Users\...\resources\css\main_menu.css" not found.
解决方案1:我可以在窗格中读取我需要的css文件,用方法“setStyle(/我的css文件/的内容)”设置样式,但我认为这可能是更好的方法。
感谢您的帮助。
答案 0 :(得分:1)
我希望你现在发现了,但我会说同样的事情来帮助那些搜索StackOverflow的人;)
问题是您传递给stage.getScene().getStylesheets().addAll(...)
的字符串必须代表网址,而您传递绝对文件名。
所以你的日常工作应该是:
public static ArrayList<String> listAbsoluteFileNames(File dir) {
File[] listOfFiles = dir.listFiles();
ArrayList<String> list = new ArrayList<String>();
for(int i=0 ; i<listOfFiles.length ; i++) {
if(listOfFiles[i].isFile())
try {
list.add(listOfFiles[i].toURI().toURL().toExternalForm());
} catch (MalformedURLException e) {
// should never happen
}
}
return list;
}