Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;loadStylesheetUnPrivileged“;尝试将css样式表与JavaFX一起使用时出错_Java_Css_Javafx_Directory_Stylesheet - Fatal编程技术网

&引用;loadStylesheetUnPrivileged“;尝试将css样式表与JavaFX一起使用时出错

&引用;loadStylesheetUnPrivileged“;尝试将css样式表与JavaFX一起使用时出错,java,css,javafx,directory,stylesheet,Java,Css,Javafx,Directory,Stylesheet,我已经阅读了我能找到的关于这个错误的每一篇文章/帖子,并且我已经尝试了提到的每一个解决方案,这个错误仍然在运行时产生。这是我的代码,下面是来自控制台的错误消息: public class Driver extends Application { public static void main(String[] args) { launch(args); } // main @Override public void start(Stage primaryStage) { P

我已经阅读了我能找到的关于这个错误的每一篇文章/帖子,并且我已经尝试了提到的每一个解决方案,这个错误仍然在运行时产生。这是我的代码,下面是来自控制台的错误消息:

public class Driver extends Application {

public static void main(String[] args) {
    launch(args);
} // main

@Override
public void start(Stage primaryStage) {

    Parent root = null;
    File css = new File("stylesheet.css");

    try {
        root = FXMLLoader.load(getClass().getResource("project-3.fxml"));
        root.getStylesheets().clear();
        root.getStylesheets().add("file:///" + css.getAbsolutePath().replace("\\", "/"));
    } catch (IOException e) {
        System.out.println(e);
        System.exit(1);
    } // try

    primaryStage.setTitle("Programmer's Calculator");
    primaryStage.setScene(new Scene(root, 397, 376));
    primaryStage.show();



} // start
}//驱动程序

为了节省空间,我排除了import语句——它们不是问题所在

以下是产生的错误:

com.sun.javafx.css.StyleManager加载样式表未授权信息:可以 找不到样式表: file:////Users/UserName/Documents/Names-p3/stylesheet.css

这是我的目录:

以下是我尝试过的:

  • 创建了一个场景变量,并尝试将css样式表应用于该变量
  • 在我的fxml文件的Pane元素中添加了“stylesheets”修饰符或任何调用它的东西,如下所示:
  • 将目录命名更改为所有可以想象的内容

事实上,一切都不起作用。发生了什么事

将包含样式表的文件放入
src
文件夹,然后将其应用于根目录

root = FXMLLoader.load(getClass().getResource("project-3.fxml")); 
root.getStylesheets().add(getClass().getResource("your_stylesheet.css").toExternalFo‌​rm());

root.getStylesheets().add(getClass().getResource("your_stylesheet.css").toString());

一个简单的解决方案是像这样在FXML中添加符号

<Pane stylesheets="@stylesheet.css">

而不是:

<Pane stylesheets="stylesheet.css">

更多信息
以下几点对我很有用:

  • 资源(文件必须和类文件在一起):
    scene.getStylesheets().add(getClass().getResource(“style.css”).toString())
  • 相对(工作目录中的文件):
    scene.getStylesheets().add(“文件:style.css”)
  • 绝对(文件仍在工作目录中):
    scene.getStylesheets().add(“文件:/”+System.getProperty(“用户目录”).replace(“\\”,“/”+“/style.css”)

它似乎在寻找:
文件的格式:
,而对于绝对路径,它甚至在windows上也在寻找根“/”。它似乎也不喜欢路径中的反斜杠“\”。

您可以从错误消息中看到,它正在
Names-p3
目录中查找文件(我认为它正在工作目录中查找),而不是您显示的目录。为什么不执行
root.getStylesheets().add(getClass().getResource(“stylesheet.css”).toExternalForm())?好吧,成功了!我现在不能说我完全理解,但是呃。。。谢谢你,伙计!