如何修复在JavaFX 11中与JFoenix模块的兼容性问题

11

我为module-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
4个回答

7

您可以尝试通过为所需的导出添加vm选项来修复此问题:

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

理想的解决方案是使用jfoenix库来替换掉com.sun.javafx.scene.control.behavior.TabPaneBehavior


1
我添加了vm选项,现在出现了Caused by: java.lang.IllegalAccessError: class com.jfoenix.skins.JFXTabPaneSkin$TabHeaderContainer (in module com.jfoenix) cannot access class com.sun.javafx.scene.control.LambdaMultiplePropertyChangeListenerHandler (in module javafx.controls) because module javafx.controls does not export com.sun.javafx.scene.control to module com.jfoenix。 - exceptionsAreBad

3

到目前为止,我已成功运行了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

如果我在项目中使用module-info.java,那么是否有可能做到这一点? - fegemo
1
各位,如果您仍然遇到错误,请尝试添加以下内容:--add-opens java.base/java.lang.reflect=com.jfoenix - Tanmay jain

1
放弃JPMS并将所有库(包括JavaFX)放在类路径中,然后通过类似于以下的启动器启动应用程序是摆脱所有模块烦恼的另一种选择:
class MyAppLauncher {public static void main(String[] args) {MyApp.main(args);}}

1
请注意,虽然这种方法可能适用于大多数在JavaFX 11-17上运行的JavaFX应用程序(并且比处理JPMS模块要容易得多),但在类路径上运行JavaFX不是JavaFX开发团队支持的配置,因此这种方法不能保证适用于新的JavaFX版本(对于最近的JavaFX版本,将在运行时生成警告,然后继续快乐地执行)。 - jewelsea
2
如果JavaFX真的失败了,那一天我就会放弃支持和使用它。我有更好的事情要做,不想浪费时间与模块系统斗争。 - mipa

0
请尝试这个,它对我有效。我希望它对你也有用。
--module-path "D:\Libs\javafx-sdk-11.0.2\lib"  
--add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics
--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED
--add-opens javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接