JavaFX无法加载caspian.css

时间:2013-12-17 00:58:16

标签: maven javafx

我有一个Maven项目,我使用javaxf WebEngine。我首先通过安装e(fx)clipse包含了javafx,我能够正常使用它。

现在我想将我的程序编译成一个包含所有依赖项的大.jar文件。我首先使用<scope>system</scope>并链接到我的JDK(1.7.0_45)中的jfxrt.jar。我使用mvm package编译我的程序,它适用于构建部分。

然后,由于this SO answer,我在maven中安装了jfxrt.jar所以我与maven有一个javafx-2.2.45.jar

然而,当我运行我的程序以及实例化特定WebEngine时,我遇到了这个错误:

INFO: com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged Could not find     stylesheet: jar:file:/target/project-name-0.1.one-jar.jar!/lib/javafx-2.2.45.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.css
SEVERE: javafx.scene.control.Control impl_processCSS The -fx-skin property has not been  defined in CSS for ScrollBarThemeImpl$ScrollBarWidget@5919e0a8[styleClass=scroll-bar]
java.lang.NullPointerException
  at com.sun.webpane.sg.theme.ScrollBarThemeImpl.initializeThickness(ScrollBarThemeImpl.java:341)
  at com.sun.webpane.sg.theme.ScrollBarThemeImpl.access$100(ScrollBarThemeImpl.java:27)
  at com.sun.webpane.sg.theme.ScrollBarThemeImpl$ScrollBarWidget.impl_updatePG(ScrollBarThemeImpl.java:50)
  at javafx.scene.Node.impl_syncPGNode(Node.java:425)
  at javafx.scene.Scene$ScenePulseListener.syncAll(Scene.java:2106)
  at javafx.scene.Scene$ScenePulseListener.syncAll(Scene.java:2115)
  at javafx.scene.Scene$ScenePulseListener.syncAll(Scene.java:2115)
  at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Scene.java:2082)
  at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2193)
  at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:363)
  at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:463)
  at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(QuantumToolkit.java:332)
  at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)

我打开了这个jar,并且找到了caspian.css文件所在的位置。

如何才能在我的“大编译jar”中使用我的WebEngine?我不在乎解决方案是否是一个快速,脏的修复程序,例如在其他地方复制/粘贴此css文件(我已经尝试过但我可能错过了一些东西......)

2 个答案:

答案 0 :(得分:2)

将fx打包到jar中并不是一个好主意。您是否尝试过使用http://www.zenjava.com/2013/07/01/javafx-maven-plugin-2-0-released/

答案 1 :(得分:0)

您可能需要声明您的依赖关系,就像不将JavaFX包含在uber jar中一样。您也可以在创建此jar时排除javafx包,但我不认为它是推荐的,因为理论资源可能不会放在javafx包下。

<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>javafx</artifactId>
  <version>2.2.3</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>javafx</artifactId>
  <version>2.2.3</version>
  <optional>true</optional>
</dependency>

更新:这也是@tomsontom提到的javafx maven插件。