我正在尝试通过以下代码段将css文件合并到我的JavaFX应用程序中:
public void loadExternalCSS() {
System.out.println("CLASSPATH: "+System.getProperty("java.class.path"));
try{
skinCSS = getClass().getResource("css/default_skin.css").toExternalForm();
}
catch(Exception e){
System.err.println("Exception: " + e);
e.printStackTrace(System.err);
}
}
运行时产生的结果:
java.lang.NullPointerException
at
robotikosanomologitos.RobotikosAnomologitos.loadExternalCSS(RobotikosAnomologitos.java:529)
at robotikosanomologitos.RobotikosAnomologitos.start(RobotikosAnomologitos.java:491)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
奇怪的是,在这个函数之上有几行,我有一个从properties
文件中读取的小函数。
public void readPropertiesFile() {
Properties props = new Properties();
InputStream is;
try {
File f = new File("properties");
is = new FileInputStream(f);
}
/* etcetera */
}
这就像一个魅力。 properties
文件位于项目目录C:\~my_projects_folder~\RobotikosAnomologitos
在搜索解决方案后,我看到getClass().getResource()
尝试在类路径中查找资源。我尝试在每次运行时打印classpath,然后我得到:
RobotikosAnomologitos\dist\run125323585\RobotikosAnomologitos.jar
这是合乎逻辑的。
在运行程序时查看此临时文件夹后,我找不到css文件夹或css文件。
但该文件确实位于RobotikosAnomologitos\css\default_skin.css
下的工作项目目录中。由于某种原因,它不会在运行时在类路径中生成它,导致getResource()
在查找时返回null。
关于如何包含它的任何想法?
编辑:我忘了提及我已将css/default_skin.css
放在src
包下,并显示在Netbeans的包树(src/css/default_skin.css
)中
以同样的方式,我有一些位于src/graphics/
下的图形,可以通过getClass().getResourceAsStream()
加载得很好。对于无法找到css文件的原因,这也让我感到困惑。也许它不会在jar
编译?
答案 0 :(得分:1)
如果您为某个类调用getResource()
而不添加/
,则该路径将被视为相对于该类的包。
如果您已将资源正确添加到类路径中,则应该可以:
skinCSS = getClass().getResource("/css/default_skin.css").toExternalForm();
答案 1 :(得分:0)
如果要使用css
classpath
中添加getClass().getResource("css/default_skin.css").toExternalForm();
文件夹
答案 2 :(得分:0)
检查您是否使用CSS文件的二进制编码(请参阅项目属性>打包)。如果您使用,提到的文件扩展名应为“.bss”。