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