我使用FXMLLOADER在
SignInUI.fxml
中加载fxml文件LogUIController
。代码在这里:
Stage signIn = new Stage();
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("SignInUI.fxml"));
SignInUIController signInUIController = new SignInUIController();
signInUIController.setStage(signIn);
Scene sceneSignIn = new Scene(fxmlLoader.load());
signIn.setTitle("Sign In");
Image icon = new Image("calculator.jpg");
signIn.getIcons().add(icon);
signIn.setScene(sceneSignIn);
signIn.show();
我在
setStage
中写了一个叫SignInUIController
的方法,可以给实例变量stage
赋值:
public Stage stage;
public void setStage(Stage stage) {
this.stage = stage;
}
我尝试在
SignInUIController
中构建 LogUIController
实例并调用 setStage
方法。最后,将 cancel
中的 SignInUIController
方法绑定到一个按钮,并使用实例变量 stage
来关闭舞台:
@FXML
private void cancel() throws IOException {
stage.close();
}
但是每次都会出错:
Cannot invoke "javafx.stage.Stage.close()" because "this.stage" is null
。我不知道为什么,以及如何解决这个问题?
您没有在运行阶段绑定控制器,因此您放置父阶段的实例不是与实际渲染窗口链接的实例。 如果您想以编程方式设置它,请检查此answer。
样品:
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("SignInUI.fxml"));
fxmlLoader.setController(new SignInUIController());