gpt4 book ai didi

JavaFX - getScene() 返回 null

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:33 26 4
gpt4 key购买 nike

我刚开始使用 JavaFX Scene Builder 构建一个小型应用程序。

它由属于“login.fxml”的 Controller 类“Login.java”组成,其中 FXML 文件“registrierung.fxml”通过名为“registrationClicked(ActionEvent event)”的方法加载:

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 获取对 Controller 类“Registrierung.java”中“registrierung.fxml”阶段的引用:

@FXML
private VBox vboxRoot;

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

但是“getScene()”总是导致 NullPointerException。两个 FXML 文件的 Controller 类都在 Scene Builder 中进行了调整。

这就是我在“registrierung.fxml”中设置 rood 节点的方式:

<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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com