如何修复使用JavaFX12在Swing中创建JFXPanel时出现的异常
我有一个带有基于Swing的UI的大型Java应用程序,它使用JavaFX通过JFXPanel组件在部分窗口中呈现视频面板和WebView面板 JDK 8的一切都很好,但我正在迁移到OpenJDK 12和JavaFX12,在创建JFXPanel时遇到运行时异常。当我调用“new 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
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");