只要我直接从Eclipse运行我的项目,我就没有问题:
scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm());
但是,只要我在jar文件中运行此代码,就找不到资源(NullPointerException
)。
我尝试将css
文件移到我的src
文件夹,然后只将stylesheet.css
作为路径而不是/stylesheet.css
,但这会导致同样的问题:使用正常Eclipse,但不是来自jar。
提示:我正在使用Zonskis Maven JavaFX Plugin来生成jar。
答案 0 :(得分:7)
我只是浪费了我(你)的时间来写愚蠢的 maven 个人资料。
而不是:
scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm());
scene.getStylesheets().add("stylesheet.css");
这是Zonski加载css
个文件的方式。
当然,您的stylesheet.css
文件应位于/src/main/resources
,或CLASSPATH
上的某个位置。
答案 1 :(得分:1)
将文件移至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 完整性):
我在project.properties
目录中创建了一个src/main/resources
文件,
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>
...
创建两个maven
个人资料,一个用于dev
,另一个用于production
(打包到jar):
<profiles>
<profile>
<id>production</id>
<properties>
<file_css>stylesheet.bss</file_css>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<file_css>stylesheet.css</file_css>
</properties>
</profile>
</profiles>
所以,您加载css
文件,如下所示:
scene.getStylesheets().add(getClass().getClassLoader().getResource(ResourceBundle.getBundle("project").getString("file_css")).toExternalForm());
我使用production
个人资料进行打包,dev
用于compile, test, run
等常规操作。
修改强> 完整示例托管在github。