目录结构
我将Main 与 sample.fxml 同时置于demo1包下
若再次使用以下代码运行
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("demo1/sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
会出现以下错误
究其原因,是因为,MAIN编译后getResource(“demo1/sample.fxml”) 中fxml的路径获取不到
解决
//需要向前返回一个路径之后查找
Parent root = FXMLLoader.load(getClass().getResource("../demo1/sample.fxml"));
同时打开两个窗口,创建两个Stage即可
private void gotoNextScene() {
Platform.runLater(new Runnable() { //主线程中完成
@Override
public void run() {
try {
FXMLLoader loader = new FXMLLoader();
// //静态读取,无法获取controller
loader.setLocation(Main.class.getResource("demo1/demo1.fxml")); // 静态读取,无法获取controller
if (loader == null) {
return;
}
GridPane rootLayout = loader.load();
Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
Scene scene = new Scene(rootLayout, 1200, 800);
primaryStage.setScene(scene); //MAIN 中的Stage
primaryStage.setMaximized(true);
Stage orderStage=new Stage();
Parent root = FXMLLoader.load(getClass().getResource("../demo2/demo2.fxml"));
Scene sceneOrder = new Scene(root, 1200, 800);
orderStage.setTitle("窗口2");
orderStage.setScene(sceneOrder);
orderStage.show(); //另外的Stage
} catch (Exception e) {
e.printStackTrace();
}
}
});
}