java - 如何在 Swing 应用程序中运行 Javafx 舞台/场景?

标签 java swing javafx fxmlloader jfxpanel

我有一个 swing 应用程序,我需要在其中运行并打开 JavaFX 场景/阶段。我必须在没有扩展应用程序的情况下运行它。我已经尝试了 Stackoverflow 上发布的大多数解决方案,但没有一个适合我的情况。

这是我最近的尝试,我收到了 NullPointerException。我的舞台变得空了。这一行 -> [stage.setScene(new Scene(root, SCENEWIDTH, SCENEHEIGHT));]

此时如何解决这个问题?或者有什么优雅的方法来解决这个问题?这是代码块:

case ADMIN:
      new JFXPanel();
            Platform.runLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/AdminView.fxml"));
                        Parent root = loader.load();
                        stage.setScene(new Scene(root, SCENEWIDTH, SCENEHEIGHT));
                        // Give the controller access to the main app
                        AdminController controller = loader.getController();
                        controller.setMainApp();
                        stage.show();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });

break;

任何帮助将不胜感激。

最佳答案

不要在 Swing 应用程序中使用 Stage;相反,使用 JFrame 并使用 JFXPanel 将 JavaFX 内容嵌入其中。 :

case ADMIN:

    // I'm assuming this code is on the AWT Event Dispatch thread

    JFrame window = new JFrame();
    JFXPanel jfxPanel = new JFXPanel();
    Platform.runLater(() -> {

        try {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/AdminView.fxml"));
            Parent root = loader.load();
            jfxPanel.setScene(new Scene(root, SCENEWIDTH, SCENEHEIGHT));
            // Give the controller access to the main app
            AdminController controller = loader.getController();
            controller.setMainApp();

            SwingUtilities.invokeLater(() -> {
                window.add(jfxPanel);
                window.pack();
                window.setVisible(true);
            });

        } catch (Exception e) {
            e.printStackTrace();
        }

    });

break;

关于java - 如何在 Swing 应用程序中运行 Javafx 舞台/场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40110175/

相关文章:

Java : String to table

java - 调用gradle idea时如何将本地依赖放在第一位?

java - 使用 Borderlayout 设置 Jpanels 内的组件大小

java - 从 JTable 单元格获取值

javafx - 在 Clojure 中编写 JavaFX 项目

javafx:当完成拖放操作触发 "long"任务时,d&d图标持续存在于目标上

java - 使用查询访问节点的子节点

java - 为我的非智能手机开始编程的最佳方式是什么?

java - 对于 3d 星空(在 JavaFX 中),使标签与观察者的视角保持一致

java - 从匿名类中检索数据