16

语言:JavaFX

IDE:Netbeans

问题:我正在尝试向样式表添加一个 css 文件,但以下代码的第一行总是生成一个NullPointerException

String css = this.getClass().getResource("double_slider.css").toExternalForm(); 
scene.getStylesheets().add(css);

我试过用完整路径替换“double_slider.css”。double_slider.css 当前与进行此调用的类位于同一包中。我还尝试了在http://introjava.wordpress.com/2012/03/21/linking-a-css-style-sheet-to-javafx-scene-graph/找到的所有变体,但没有成功。清理和构建也无济于事。

如果我将 css 文件放在转储 .class 文件的构建文件夹中,NullPointerException 就会消失。但随后 css 文件无法正常工作,因为它引用了我项目中的其他文件。

4

17 回答 17

22

将您的yourname.css文件直接放在src目录下。

scene.getStylesheets().add("yourname.css")

需要清理和构建

于 2014-04-27T15:39:39.897 回答
16

我认为您缺少导致无法找到 CSS 文件的斜杠。尝试更正您的路径参考。

例如:

-root
--app/Main.java
--assets/double_slider.css

将会:

String css = this.getClass().getResource("/assets/double_slider.css").toExternalForm();
于 2013-04-02T08:02:25.640 回答
9

我有同样的问题。我在 Win7 上使用 NetBeans 7.3 和 JavaFX 2.2.7、JDK 7.0_21。

我的解决方案是将 .css 放在与包含void start(Stage stage)的 Java 文件相同的文件夹中。所以项目视图看起来像这样:

  • 项目名称
    • 源包
      • pkg随便
        • 主.java
        • MyCssFile.css

(所以 CSS 文件包中,我觉得它真的很奇怪和约束。一些文档告诉我将它放在项目的根目录中,以便在运行时找到它,但这对我在 NB 中不起作用。我的应用程序现在运行,无论我是否通过点击+或单击项目上下文菜单上的“运行”来启动包含“ start(..) ”的文件。无论我是否让 NB 将所有内容放入 JAR 中都没有关系。)CtrlU

这是在上述情况下加载 CSS 的代码:

  URL url = this.getClass().getResource("controlStyle1.css");
    if (url == null) {
        System.out.println("Resource not found. Aborting.");
        System.exit(-1);
    }
    String css = url.toExternalForm(); 
    scene.getStylesheets().add(css);

而这不起作用:

    scene.getStylesheets().add("controlStyle1.css");

希望这可以帮助。

于 2013-05-01T16:16:09.497 回答
6

我遇到了同样的问题(在 NetBeans 8 中)。我在这里找到了解决方案:https ://blog.idrsolutions.com/2014/04/use-external-css-files-javafx/

我的资源文件电子表格.css 在这里:

MyApp
-resources
--spreadsheet.css
-source packages
--fr.ccc.myapp.view
---mainView.java
---FXMLMain.fxml

在 mainView.java 中:

File f = new File("resources/spreadsheet.css");
spreadsheet.getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/"));

希望这可以帮助。

于 2015-01-21T16:27:08.137 回答
3

所有答案都缺少一个非常重要的部分,那就是css 文件名称之前的“ / ”:

文件夹结构:

src
  resources
    stylesheet.css

像这样加载它,注意css 文件之前的起始斜杠:

scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm())
于 2019-05-15T21:02:52.770 回答
2

考虑到您的旧代码:

String css =this.getClass().getResource("double_slider.css").toExternalForm(); 
scene.getStylesheets().add(css);

尝试将其更改为这个新代码,它将起作用:

screen.getStylesheets().add(getClass().getResource("double_slider.css").toExternalForm());

使用时getClass(),不需要使用this关键字。

我希望这对你有用。:)

于 2015-04-07T14:53:06.317 回答
2

您可以将 style.css 直接添加到 .fxml 文件中作为根元素的属性,如 stylesheets="@your_relative_path/style.css"。

如果要访问 src 文件夹中的 css 文件,可以使用 @../style.css

于 2016-01-29T12:21:53.417 回答
1

这很简单。

this.scene.setUserAgentStylesheet(/resources/blabla.css);

这对我有用-

于 2014-12-30T15:29:00.140 回答
0

嗯,你在 Netbeans 上吗?尝试“清理并构建”项目。

于 2012-12-19T08:46:16.443 回答
0

您是否在设置样式表之前初始化了场景对象?

场景 = 新场景(myRootLayout, 600, 600); // 例如

于 2012-12-19T22:22:21.077 回答
0

我做了一个小的登录示例,这就是我如何链接我的 styleshet.css

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("LoginUI.fxml"));


    Scene scene = new Scene(root);

    scene.getStylesheets().add(JavaFXLogin.class.getResource("stylesheet.css").toExternalForm());

    stage.setScene(scene);
    stage.show();

}

您可以使用此代码行来链接您的 css 文件。但是css文件应该在你的包中。

scene.getStylesheets().add(JavaFXLogin.class.getResource("stylesheet.css").toExternalForm());

于 2019-08-11T14:53:10.170 回答
0

假设文件结构是这样的:
-root
--src
---resources
----double_slider.css
---package
----JavaFXFile.java

这对我有用:

scene.getStylesheets().add((new File("src/resources/double_slider.css")).toURI().toString());
于 2019-01-13T02:27:26.383 回答
0

在 maven 项目中,您必须在 javafx-plugin 部分的 file.pom 中定义资源的路径:如下所示:

<configuration>
    <mainClass>com.personale.ciaomondo.App</mainClass>
          <resources>          
            <resource>
              <directory>src/main/resources</directory>
            </resource>
          </resources>
</configuration>
于 2020-10-17T20:30:57.137 回答
0

尝试将“@”作为文件名。它对我有用。

例如:'@main.css'

于 2019-05-16T23:33:03.870 回答
0
scene.getStylesheets().add("file:///home/fullpathname/file.css");

或者

scene.getStylesheets().add("file:/home/fullpathname/file.css");

但是之后:

运行/清理和构建项目

为我工作

NetBeans IDE 8.2;Java:1.8.0_201;Linux 16.04

于 2019-05-07T16:29:45.377 回答
0

在你的文件.java中使用这个

Application.setUserAgentStylesheet(getClass().getResource("application.css")
                .toExternalForm());
于 2015-11-20T14:01:23.510 回答
0

文件夹结构

在 MedicalLibraryFx.java

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

css与控制器位于同一目录时的文件夹结构

scene.getStylesheets().add(getClass().getResource("style.css").toString());
于 2017-12-01T03:23:47.807 回答