在eclipse中使用JavaFX空指针异常加载css

时间:2013-03-06 00:54:27

标签: java javafx-2 javafx

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

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

我的background.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 个答案:

答案 0 :(得分:5)

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

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

然后它会成功加载。

答案 1 :(得分:2)

您是否初始化了Scene对象?

//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);

答案 2 :(得分:1)

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

一起使用JavaFX文件和CSS文件必须满足三个条件:

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

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

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

答案 3 :(得分:1)

我遇到了和你相同的错误......这是我找到的解决方案...... 如果您有一个Main类,请替换" welcome"由Main获取此代码:

使用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());

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