如何修复使用JavaFX12在Swing中创建JFXPanel时出现的异常

如何修复使用JavaFX12在Swing中创建JFXPanel时出现的异常,java,javafx,jfxpanel,Java,Javafx,Jfxpanel,我有一个带有基于Swing的UI的大型Java应用程序,它使用JavaFX通过JFXPanel组件在部分窗口中呈现视频面板和WebView面板 JDK 8的一切都很好,但我正在迁移到OpenJDK 12和JavaFX12,在创建JFXPanel时遇到运行时异常。当我调用“new JFXPanel()”时,我得到一个异常: Exception in thread "AWT-EventQueue-0" java.lang.IllegalAccessError: class javafx.embed

我有一个带有基于Swing的UI的大型Java应用程序,它使用JavaFX通过JFXPanel组件在部分窗口中呈现视频面板和WebView面板

JDK 8的一切都很好,但我正在迁移到OpenJDK 12和JavaFX12,在创建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参数: --模块路径/Library/Java/javafx-sdk-12.0.2/lib——添加模块javafx.controls、javafx.web、javafx.media、javafx.base

这是JavaFX12中的错误还是我做错了什么

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()

我无法修复此异常,因此使用了此替代方案。 InterfaceGraphiqueAuth是一个swing应用程序,当它结束时,它将我命名为fx的布尔值设置为false,因此getFx返回false并打开javafx窗口。我添加了wait方法来等待swing应用程序将布尔fx设置为false

这是InterfaceGraphiqueAuth中发生的情况:

if((loginTF.getText().compareTo(compte.getUsername()) == 0)&& (passwordTF.getText().compareTo(compte.getCode()) == 0)){ 
                            //le compte existe dans la base de donn�es
                            k=true;
                            prenom=compte.getPrenom();
                            lastname=compte.getNom();
                            sexe=compte.getSexe();
                        }
                    }
                            if(k){
                                dispose();

                                    fx=true;

                                   }

                        else JOptionPane.showMessageDialog(null, "Echec");


Slaw的注释“使用——添加模块javafx.web、javafx.media、javafx.swing”对我很有用。需要将javafx.swing附加到我的运行配置的“VM选项”中。

使用
--添加模块javafx.web、javafx.media、javafx.swing
谢谢,我不小心遗漏了javafx.swing模块。它现在工作得很好。请使用该链接编辑您的答案,以添加其他详细信息,而不是评论。希望它能解决问题,但请使用它添加代码解释,以便用户能够完全理解他/她真正想要的内容。
if((loginTF.getText().compareTo(compte.getUsername()) == 0)&& (passwordTF.getText().compareTo(compte.getCode()) == 0)){ 
                            //le compte existe dans la base de donn�es
                            k=true;
                            prenom=compte.getPrenom();
                            lastname=compte.getNom();
                            sexe=compte.getSexe();
                        }
                    }
                            if(k){
                                dispose();

                                    fx=true;

                                   }

                        else JOptionPane.showMessageDialog(null, "Echec");