簡體   English   中英

如何在Swing應用程序中運行Javafx階段/場景?

[英]How to run Javafx stage/scene in Swing Application?

我有一個swing應用程序,需要在其中運行並打開JavaFX Scene / stage。 我必須在不擴展應用程序的情況下運行它。 我已經嘗試了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;

此時,很有可能階段為null。 階段的初始化在哪里?

如果stage為null,stage.setScene(...)將拋出nullpointer異常。

這是我從@djbrown建議的Oracle教程中找到的解決方案。 測試。 工作正常 想過,如果有人需要的話。

但是我現在在我的應用程序中遇到其他一些問題。 自從我使用舞台。

在此解決方案中,我使用了JFrame。 如果有人知道如何在Swing應用程序中使用Stage,請告訴我。 謝謝。

JFrame frame = new JFrame();
                    frame.setUndecorated(true);
                    final JFXPanel fxPanel = new JFXPanel();
                    frame.add(fxPanel);
                    frame.setSize(FRAMEWIDTH, FRAMEHEIGHT);
                    frame.setVisible(true);
                    frame.setResizable(false);


                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {

                            FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/AdminViewSwing.fxml"));
                            try {
                                Parent root = loader.load();
                                Scene scene = new Scene(root, FRAMEWIDTH, FRAMEHEIGHT);
                                fxPanel.setScene(scene);
                                AdminController controller = loader.getController();
                                controller.setMainApp();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM