【问题标题】:eclipse JavaFX css resource not found找不到eclipse JavaFX css资源
【发布时间】:2016-01-30 19:06:47
【问题描述】:

JavaFX GUI 的样式表有问题。 我的样式表无法加载,并且出现此错误:

com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
WARNING: Resource "file:images\stylesheet.css" not found.

我尝试将 stylesheet.css 放在与图像相同的文件夹中。图片没问题,但是样式表没找到。

scene.getStylesheets().add("images\\stylesheet.css");

我也试过这个:

scene.getStylesheets().add("file:images\\stylesheet.css");

和:

scene.getStylesheets().add("file:///images/stylesheet.css");

我还尝试了不同的文件夹,例如 .java 文件所在的文件夹。

似乎没有任何效果。就像Eclipse 不识别样式表一样。

【问题讨论】:

    标签: java css eclipse javafx


    【解决方案1】:

    问题是 java 的 com.sun.javafx.css.StyleManager 可以处理 URL,但它不能很好地将 File.toString() 转换为 url,所以你必须传递一个已经转换为文件,到一个 URL,然后返回到一个字符串。因此,当它将字符串解析为 URL 时,它不会因空格字符而窒息。

    这行得通:

    String fontSheet = fileToStylesheetString( new File ("location") );
    
    if ( fontSheet == null ) {
        //Do Whatever you want with logging/errors/etc.
    } else {
        scene.getStylesheets().add( fontSheet );
    }
    
    public String fileToStylesheetString ( File stylesheetFile ) {
        try {
            return stylesheetFile.toURI().toURL().toString();
        } catch ( MalformedURLException e ) {
            return null;
        }
    }
    

    【讨论】:

      【解决方案2】:

      我使用的解决方案与上一个答案几乎相同,除了一个扩展,toString() 调用:

      scene.getStylesheets().add(getClass().getResource("cssfile.css").toString());
      

      如果调用上述命令的文件与 css 文件不在同一个 pacakge/目录中,请添加相对路径,即"images/cssfile.css"。

      【讨论】:

        【解决方案3】:

        试试getClass().getResource("/images/stylesheet.css");

        scene.getStylesheets().add(
          getClass().getResource("/images/stylesheet.css")
        );
        

        【讨论】:

          【解决方案4】:

          JavaFX 中的图像在内部实现从类加载器加载资源,但不幸的是,样式表并非如此。所以如果你说:

          new Image("/Images/background.png");
          

          它被转换为:

          new Image(getClass().getClassLoader().getResource("Images/background.png");
          

          但在getStylesheets().add() 的情况下不会发生这种情况。所以为了运行它,你需要自己添加一个类加载器:

          scene.getStylesheets().add(
                getClass().getClassLoader().getResource("images\\stylesheet.css"));
          

          注意: 这里的路径取决于css文件的位置。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-04-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-08
            • 2019-02-02
            • 1970-01-01
            相关资源
            最近更新 更多