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