当前位置: 首页 > 面试题库 >

JavaFX-getScene()返回null

程举
2023-03-14
问题内容

我刚刚开始使用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 Scene Builder来构建一个小型应用程序。 它由属于login.fxml的控制器类Login.java组成,其中FXML文件registrierung.fxml通过名为注册点击(动作事件)的方法加载: 现在我想参考一下“registrierung”的阶段。fxml“在控制器类”注册表中。java“通过根节点vboxRoot: 但是,“getScene()”总是导

  • 加载样式表,并在用户单击按钮时将其应用于场景 调用getScene()返回null。 函数所在的类是场景的控制器和根节点,我使用SceneBuilder 2.0,并将类设置为加载fxml的控制器,它是一个。 问题代码是类中的一个成员函数,标记是这样的,我可以通过设置按钮来调用它。 完整的代码可以在https://github.com/SebastianTroy/FactorioManufactur

  • 问题内容: 我昨天在JavaFX中构建了一个小应用程序。我想在Controller类中获取应用程序的场景。每次尝试在控制器类中获取场景时,都会出错。我可以在Controller类的Button上设置OnKeyPressed方法,效果很好。但是,只有在选择Button后,它才能正常工作。我只能在Main类方法replaceSceneContent中获得场景。我已经读过这个问题,但是我在initial

  • 我昨天在JavaFX中构建了一个小应用程序。我想在Controller类中获取应用程序的场景。每次我试图在控制器类中获取场景时,我都会出错。我可以在Controller类中的Button上设置OnKeyPested-method,工作正常。但是只有当按钮被选中时,它才工作正常...我可以只在Main类方法replace eSceneContent中获取场景。我已经读过这个问题了,但是我在初始化方法

  • 代码: 这里的问题是:lowEndDate和highEndDate总是为null,不管输入是什么。

  • 问题内容: 我创建了一个简单的JavaFX应用程序,该应用程序在TextField中接收来自用户的输入。我将来自SceneBuilder的KeyTyped事件附加到控制器。我的函数如下所示: 当我键入回车键时,此功能始终打印出UNDEFINED。有想法该怎么解决这个吗?我键入的其他字母似乎也有相同的问题。 问题答案: 是一个特殊事件。它没有但已设置。 请参见字母“ a”的示例: 和javadoc: