如何使用 javafx 11 修复 jfoenix 模块

How to fix jfoenix modules with javafx 11

所以我添加了我对模块-info.java 的要求,并最终加载了我的程序,但是一旦选项卡窗格想要从 jfoenix 库加载,就会抛出这个错误。

Caused by: java.lang.IllegalAccessError: class com.jfoenix.skins.JFXTabPaneSkin (in module com.jfoenix) cannot access class com.sun.javafx.scene.control.behavior.TabPaneBehavior (in module javafx.controls) because module javafx.controls does not export com.sun.javafx.scene.control.behavior to module com.jfoenix

您可以尝试解决此问题的一种方法是为所需的导出添加 vm 选项:

--add-exports javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix

理想的解决方案是 jfoenix 库不再使用 com.sun.javafx.scene.control.behavior.TabPaneBehavior

到目前为止,我能够成功地运行 jfoenix 库的每个方面。我仍然需要在我的应用程序中进行一些测试,以确保没有隐藏的错误,但目前以下 VM 选项解决了这个问题:

--add-exports javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix
--add-exports javafx.controls/com.sun.javafx.scene.control=com.jfoenix
--add-exports javafx.base/com.sun.javafx.binding=com.jfoenix
--add-exports javafx.graphics/com.sun.javafx.stage=com.jfoenix
--add-exports javafx.base/com.sun.javafx.event=com.jfoenix

所有这些模块痛苦的替代方法是完全放弃 JPMS 并将所有库(还有 JavaFX)放在类路径中,然后通过这样的启动器启动您的应用程序:

class MyAppLauncher {public static void main(String[] args) {MyApp.main(args);}}