我有一个带有基于 Swing 的 UI 的大型 Java 应用程序,它使用 JavaFX 通过 JFXPanel 组件在某些窗口的部分中呈现视频面板和 WebView 面板。
JDK 8 一切正常,但我正在迁移到 OpenJDK 12 和 JavaFX 12,并且在创建 JFXPanel 时遇到运行时异常。当我调用“new JFXPanel()”时,出现异常:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalAccessError: class
javafx.embed.swing.JFXPanel (in unnamed module @0x44bebd15) cannot access
class com.sun.javafx.logging.PlatformLogger (in module javafx.base) because
module javafx.base does not export com.sun.javafx.logging to unnamed module
@0x44bebd15
javafx-sdk-12.0.2 中的 javafx.base 和 javafx.swing jar 文件包含在我的 Eclipse 项目和运行时(以及一些其他 JavaFX jar 中)。
我正在使用 VM 参数:--module-path /Library/Java/javafx-sdk-12.0.2/lib --add-modules javafx.controls,javafx.web,javafx.media,javafx.base
这是 JavaFX 12 中的错误还是我做错了什么?
htmlPanel = new JFXPanel() {
public Dimension getPreferredSize() {
return new Dimension(CoreDrawer.scaledSize(width),
CoreDrawer.scaledSize(height));
}
public Dimension getMinimumSize()
{
return getPreferredSize();
}
};
Platform.runLater(new Runnable() { // run on the JavaFX thread
public void run() {
initFX(htmlPanel);
}
});
Platform.setImplicitExit(false);
thePanel.add(htmlPanel);
函数 initFX() 向 JFXPanel 添加了一个场景,但程序没有通过“new JFXPanel()”