[英]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.