我有一个swing应用程序,我需要运行并打开JavaFX Scene / stage。我必须运行它而不扩展Application。我已经尝试过在Stackoverflow上发布的大多数解决方案,它们都没有在我的情况下工作。
这是我最近的尝试,我收到了NullPointerException。我的舞台变成了NULL。这一行 - > [stage.setScene(新场景(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;
非常感谢任何帮助。
答案 0 :(得分:4)
不要在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;
答案 1 :(得分:0)
此时最可能的阶段为空。阶段的初始化在哪里?
如果stage为null,则stage.setScene(...)将抛出一个nullpointer异常。
答案 2 :(得分:0)
这是我从@ d.j.brown建议的Oracle's tutorial找到的解决方案。测试。它正在发挥作用。想,如果有人需要的话。
但我现在正在运行我的应用程序中的其他一些问题。因为我使用过Stage。
在这个解决方案中,我使用了JFrame。如果有人知道如何在Swing应用程序中使用Stage,请告诉我。谢谢。
public static readonly IComparer Instance = new MobileModelComparer();