Java Scene.getStylesheets().add()在jar文件中不工作
只要我直接从Eclipse运行我的项目,我就没有问题:Java Scene.getStylesheets().add()在jar文件中不工作,java,jar,resources,javafx-2,maven-3,Java,Jar,Resources,Javafx 2,Maven 3,只要我直接从Eclipse运行我的项目,我就没有问题: scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm()); 但是,只要我在jar文件中运行此代码,就找不到资源(NullPointerException) 我尝试将css文件移动到我的src文件夹中,然后只将stylesheet.css作为路径,而不是/stylesheet.css,但这会导致同样的问题:使用Eclipse可
scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm());
但是,只要我在jar文件中运行此代码,就找不到资源(NullPointerException
)
我尝试将css
文件移动到我的src
文件夹中,然后只将stylesheet.css
作为路径,而不是/stylesheet.css
,但这会导致同样的问题:使用Eclipse可以正常工作,但不能从jar开始
提示:我正在使用生成jar。将文件移动到
src/main/resources
并添加css
文件:
scene.getStylesheets().add(getClass().getClassLoader().getResource("stylesheet.css").toExternalForm());
如果您想从jar运行它,那么将stylesheet.css
更改为stylesheet.bss
(二进制css),打包您的应用程序:
mvn clean compile jfx:build-jar
打开你的罐子
java -jar app.jar
我有一个难看的黑客程序来让它变得有用(我正在使用Netbeans,惊人的maven完整性): 我在
src/main/resources
目录中创建了一个project.properties
文件
file_css= ${file_css} // by default I use *.css file.
并使其可过滤,在我的POM
文件中:
...
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version> 1.5 </version>
<configuration>
....
</configuration>
</plugin>
</plugins>
</build>
...
因此,您可以像这样加载css
文件:
scene.getStylesheets().add(getClass().getClassLoader().getResource(ResourceBundle.getBundle("project").getString("file_css")).toExternalForm());
我使用production
profile进行打包,使用dev
进行编译、测试、运行等常规操作
编辑: 一个完整的示例位于。我只是浪费了我(你)的时间编写愚蠢的maven配置文件 而不是:
scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm());
简单地写下:
这就是加载css
文件的方式
当然,您的
样式表.css
文件应该在/src/main/resources
中,或者在类路径上的某个地方
谢谢您的回答,但仍然是同一个问题):从Eclipse运行时工作正常,但从JAR运行时不工作。谢谢,从JAR运行时工作正常!但是,有没有一种智能的方法可以在构建JAR文件时自动使用bss,而在其他情况下使用css呢?因为使用bss,从Eclipse\:@stefan.at.wpf运行时无法工作。如果我的解决方案看起来很难看,请尝试打开一个。不,它感觉是一种易于实现的方法,只需要一些时间来测试;-)但是现在接受你的回答,因为你已经回答了最初的问题:-)再次非常感谢!tarrsalah,你能看看你的答案吗?如果缺少过滤功能,你可以在家里发邮件吗?您使用的是哪个命令行命令?我从未将变量替换为stylesheet.bss):lol,有趣的是,稍后将对此进行验证,然后选择此答案作为正确答案;-)谢谢你的第二个回复!
scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm());
scene.getStylesheets().add("stylesheet.css");