Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Scene.getStylesheets().add()在jar文件中不工作_Java_Jar_Resources_Javafx 2_Maven 3 - Fatal编程技术网

Java Scene.getStylesheets().add()在jar文件中不工作

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可

只要我直接从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");