我正在尝试使用这行代码将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
答案 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文件必须满足三个条件:
您必须在代码中声明使用CSS文件,例如
scene.getStylesheets().add(welcome.class.getResource("background.css").toExternalForm());
我认为遗漏的是包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());
希望这会有所帮助......;)