当前位置: 首页 > 知识库问答 >
问题:

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

孔海超
2023-03-14

我有一个基于Swing的UI的大型Java应用程序,它使用JavaFX来渲染视频面板和WebView面板,这些面板是通过JFXPanel组件在一些窗口中呈现的。

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.swingjar文件包含在我的Eclipse项目和运行时中(以及其他一些JavaFX jar)。

我正在使用VM参数:--module path/Library/Java/javafx-sdk-12.0.2/lib--添加模块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添加了一个场景,但是程序没有通过“新JFXPanel()”

共有2个答案

松俊美
2023-03-14
public class Main extends Application{

    @Override
    public void start(Stage primaryStage) throws Exception {



        primaryStage.initStyle(StageStyle.TRANSPARENT);
        Parent root=FXMLLoader.load(Main.class.getResource("../../../com/chatbot/view/chatgui.fxml"));
        Scene scene=new Scene(root);
        scene.setFill(Color.TRANSPARENT);
        primaryStage.setScene(scene);
        primaryStage.show();

    }


    public static synchronized void main(String[] args) throws InterruptedException {

                InterfaceGraphiqueAuth fen = new InterfaceGraphiqueAuth();



            while(!fen.getFx()){

                try{
                    Thread.currentThread().wait();;
                }catch(Exception exc){}

                }


        launch(args);

    }
}

我不能修复这个异常,所以我使用了这个替代方案。InterfaceGraphiqueAuth是一个摇摆应用程序,当它结束时,它将我命名为fx的布尔值设置为false,因此getFx返回false,javafx窗口打开。我添加了等待方法,以等待摇摆应用程序将布尔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");

阎庆
2023-03-14

Slaw的注释“使用-添加模块javafx.web、javafx.media、javafx.swing”为我工作。需要将javafx.swing附加到运行配置的VM选项。

 类似资料:
  • 我们应该处理的XML消息的格式如下: 收到的例外: javax。xml。绑定解组异常:意外元素(uri:,本地:“ns0:MessageType”)。预期的元素是 上述异常发生在com中。xmlprocessor。MessageParser类。上述课程中的代码过去是这样的(并且已经工作了很长时间): 事实证明,这会给你带来XXE的坏情况。所以我们尝试了许多非常相似的东西DocumentBuilde

  • 问题内容: 我刚遇到JavaFX和Swing的怪异之处。 处置已添加到JFrame或JPanel的JavaFX Panel时,重新添加新的JFXPanel将引发IllegalStateException:“已调用Platform.exit”。 就我而言,这是在我删除了一些内部带有JFXPanels的JPanels,然后尝试重新添加它们之后发生的。 问题答案: 幸运的是,我在Oracle论坛上找到了

  • 我目前正在开发我的第一个游戏(我不会无耻地推广),但我正试图建立一个排行榜,但当我尝试初始化我的GameHelper时,我得到了一个例外。我找不到任何答案,如果有任何帮助,我将不胜感激。 代码: 我收到的错误是 “java.lang.RuntimeException:无法实例化活动组件信息{com.aidanstrong.runner/com.aidanstrong.runner.AndroidL

  • 我很难知道如何将我的JFXPanel(它是一个mp3播放器)集成到一个现有的Swing应用程序中,该应用程序是一个JFrame,其中添加了几个不同的JPanel。我对JavaFX是一个完全的noob,它与Swing非常不同。 我能够得到下面的代码来运行和做我想做的事情。它将播放mp3文件从一个目录,我有他们包含在。这是某人编写的示例中的代码。我的问题是,这段代码创建了JFrame,有main方法和

  • 我在Swing应用程序中使用JavaFX,带有JFXPanel。我一直在使用css文件手动编码JavaFXUI。我正在使用NetBeans 8.1。 我想知道,在这种情况下,我可以使用JavaFX场景生成器生成UI吗?好的,输出是代表UI组件的FXML文件。这与JFXPanel使用JavaFX的方式兼容吗? 谢谢

  • 我正在尝试运行MipSdk-Pol 获取策略失败,请求失败,http状态代码:204 当使用用户凭证运行预编译文件API示例时,也会发生同样的情况: 据我所知,我有一个E5试用版,策略和标签都设置正确。我很乐意得到任何建议,谢谢!