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”的阶段:

@FXML

private 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();

}

或如果您有一个事件,一旦您单击某物便触发该事件(在场景加载后执行)

@FXML

private void action(ActionEvent event) throws IOException {

Stage stage = (Stage) vboxRoot.getScene().getWindow();

}

这样就行了!

以上是 JavaFX-getScene()返回null 的全部内容, 来源链接: utcz.com/qa/410238.html

回到顶部