gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:02:08 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com