3

我正在尝试使用这行代码将 CSS 文件加载到 JavaFX 中,它给了我一个空指针异常:

scene.getStylesheets().add(welcome.class.getResource("background.css").toExternalForm());

Mybackground.css与我创建的欢迎类位于同一个文件夹中。

知道为什么我得到一个空指针吗?

错误日志:

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source)
    at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
    at welcome.start(welcome.java:164)
    at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$5.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source)
    ... 1 more
4

4 回答 4

5

任何资源都应该在类路径上才能成功加载(如果它与欢迎类在同一个文件夹中,那么它已经是这样了)。然后,您应该在样式表文件的路径前加上“/”符号,使其看起来像这样:

scene.getStylesheets().add(welcome.class.getResource("/background.css").toExternalForm());

然后它将成功加载。

于 2013-05-24T19:44:38.770 回答
2

你初始化场景对象了吗?

//Create a scene object. Pass in the layout and set with and height
this.scene = new Scene(layout, 600, 400);

//Add CSS Style Sheet (located in same package as this class).
String css = this.getClass().getResource("background.css").toExternalForm();
scene.getStylesheets().add(css);
于 2013-03-06T01:00:14.660 回答
1

我和你有同样的错误......这是我找到的解决方案......如果你有一个 Main class ,用 Main 替换“welcome”以获得此代码:

带有 JavaFX 2.0 的 Eclipse 中的树:

-MyJavaProject            (JavaProject)
 | -src                   (Folder)
     | -Appli             (Package)
        |  -Main.java     (Class Main)
        |  -application.css  (css file)

这棵树的代码:

scene.getStylesheets().add(
          Main.class.getResource("application.css").toExternalForm());

希望这会有所帮助... ;)

于 2014-08-20T19:14:26.580 回答
1

所以我知道这是一个老问题,但我最近遇到了类似的问题,所以我想给出我认为的答案:

必须满足三个条件才能同时使用 JavaFX 文件和 CSS 文件:

  1. JavaFX 文件和 CSS 文件都必须在同一目录中
  2. 您必须在代码中声明您正在使用 CSS 文件,例如

      scene.getStylesheets().add(welcome.class.getResource("background.css").toExternalForm());
    
  3. 我认为被遗漏的是包 PackageName;

    包装你的包裹名;.
    将位于您定义导入的位置之前的 JavaFX 文件顶部。如果您不习惯在 Java 中处理多个文件,或者如果您从头开始编写代码,那么很容易忘记这一点。没有包 YourPackageName;不会阻止您的基本文件工作,但是当您尝试使用自己定义的 CSS 文件时,它可以阻止您的程序运行。

于 2014-02-27T15:15:31.763 回答