JavaFX-getScene()返回null
我刚刚开始使用JavaFX Scene Builder来构建一个小型应用程序。
它由属于“ login.fxml”的控制器类“ Login.java”组成,其中通过称为“ registrationClicked(ActionEvent
event)”的方法加载了FXML文件“ registrierung.fxml”:
public class Login {@FXML
private void registrationClicked(ActionEvent event){
try{
((Node) (event.getSource())).getScene().getWindow().hide();
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/fxml/registrierung.fxml"));
Parent root = (Parent) loader.load();
Stage stage = new Stage();
Scene scene = new Scene(root);
stage.setTitle("Registration");
stage.setScene(scene);
stage.setResizable(false);
stage.show();
} catch(IOException e){
e.printStackTrace();
}
}
现在,我想通过根节点vboxRoot引用控制器类“ Registrierung.java”中“ registrierung.fxml”的阶段:
@FXMLprivate VBox vboxRoot;
Stage stage = (Stage) vboxRoot.getScene().getWindow();
但是,“ getScene()”始终会导致NullPointerException。这两个FXML文件的控制器类都在Scene Builder中进行了调整。
这是我在’registrierung.fxml’中设置根节点的方式:
<VBox fx:id="vboxRoot" maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="267.0" prefWidth="355.0" stylesheets="@../css/styles.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="businesslogik.Registrierung">
我究竟做错了什么?
回答:
您正在尝试获取尚未初始化的对象的场景。如果您在进行相同的操作
@Override public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
Stage stage = (Stage) vboxRoot.getScene().getWindow();
}
或如果您有一个事件,一旦您单击某物便触发该事件(在场景加载后执行)
@FXMLprivate void action(ActionEvent event) throws IOException {
Stage stage = (Stage) vboxRoot.getScene().getWindow();
}
这样就行了!
以上是 JavaFX-getScene()返回null 的全部内容, 来源链接: utcz.com/qa/410238.html