0

我正在开发一个 JavaFX 应用程序,我目前正在从事资源管理工作。我实现了创建实用程序静态类,为我的应用程序提供字体、图像等。但我被困在 CSS 加载上。

我的 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定义包含我的样式表的目录“css”的文件对象在哪里。我想加载这些文件,但我遇到了一些错误。

在我的应用程序子类中:

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:我可以使用“setStyle(/我的 css 文件的内容/)”方法在窗格中读取我需要的 css 文件来设置样式,但我认为这可能是一个更好的方法。

谢谢你的帮助。

4

1 回答 1

1

我希望你现在发现了,但我会说同样的话,以帮助任何将搜索 StackOverflow 的人;)

问题是您传递的字符串stage.getScene().getStylesheets().addAll(...)必须代表 URL,而您传递的是绝对文件名。所以你的例程应该是:

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;
}
于 2014-06-26T09:43:24.760 回答