【问题标题】:JavaFX can't load caspian.cssJavaFX 无法加载 caspian.css
【发布时间】:2013-12-17 00:58:16
【问题描述】:

我有一个使用javaxf WebEngine 的Maven 项目。我先通过安装e(fx)clipse包含javafx,就可以正常使用了。

现在我想将我的程序编译成一个包含所有依赖项的大 .jar 文件。我首先在我的 JDK (1.7.0_45) 中使用了 <scope>system</scope> 并链接到 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 文件复制/粘贴到其他地方(我已经尝试过,但我可能错过了一些东西..)

【问题讨论】:

    标签: maven javafx


    【解决方案1】:

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

    【讨论】:

    • 我没有。在我看来,这是为了构建一个仅限 javafx 的应用程序,但在我的应用程序中,它只是应用程序的一部分。我会试一试。但是,我需要这个 jar 是独立的,所以我需要将 javafx 捆绑到其中...
    • 好的,成功了!太好了,谢谢。使用它有点困难,但它已经完成了。你让我开心:)
    【解决方案2】:

    您可能需要声明您的依赖项,例如不要将 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 插件。

    【讨论】:

    • 确实,@tomsontom 的方式是可行的。谢谢。
    猜你喜欢
    • 2017-02-08
    • 2019-05-25
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2013-04-12
    • 2019-04-30
    • 1970-01-01
    • 2019-11-04
    相关资源
    最近更新 更多