首页 > 解决方案 > 启动设置了默认值的 Popupwindow 时出现 NullPointerException,否则它可以工作

问题描述

当我通过主控制器的按钮事件打开弹出窗口时,弹出窗口出现并且一切看起来都很完美。但是当我尝试在组合框或文本字段中设置数据时

PopUpPersController:

public PopUpPersController() {
    initialize();
}
private void initialize() {
    txtMa_LohnGesKum.setText("1200.12");
}

并按下按钮打开弹出窗口,我得到一个空指针异常。

maincontroller称为Projektcontroller,关联FXML-file被称为Projekt.fxml 弹出窗口控制器被称为“PopUpPersController”,关联FXML-file被称为PersCalc.fxml。所有元素都有 fxId。我认为用 defaultdata 填充组合框或文本字段的方式与在 Maincontroller 中的工作方式相同......我没有找到涵盖这个问题的答案。

我对 Java 很陌生,非常感谢您的帮助和最诚挚的问候 Marcus

Main 或 ProjectController 中用于打开弹出窗口的 Button 的代码:

@FXML
void onAction_Test(ActionEvent event) {
    try {
        Parent root1 = FXMLLoader.load(getClass().getResource("/ui/fxml/PersCalc.fxml"));
        Stage persStage = new Stage();
        persStage.setTitle("Personalkosten-Rechner");
        persStage.setScene(new Scene(root1));
        persStage.show();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我试图找出主要错误:

  1. PersCalc.fxml 中的 javafx.fxml.LoadException

此行中的代码:

<BorderPane xmlns="http://javafx.com/javafx/10.0.1"xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.controller.PopUpPersController">

2.来自ProjectController中的按钮事件(见上)这一行的代码:

Parent root1=FXMLLoader.load(getClass().getResource("/ui/fxml/PersCalc.fxml"));

3.数据分配textfield

引起:ui.controller.PopUpPersController.initialize(PopUpPersController.java:123) 处的 java.lang.NullPointerException

此行中的代码(见上文initialize()):

 txtMa_LohnGesKum.setText("1200.12");

标签: javajavafxnullpointerexceptioninitializationpopupwindow

解决方案


加载包含该fx:controller属性的 fxml 会导致FXMLLoader使用带有 0 个参数的构造函数来创建控制器类的实例。在注入任何字段之前调用构造函数导致 a NullPointerException,即使这些字段可以访问FXMLLoader并且 fxml 文件包含正确的fx:id属性。

假设您确实正确设置了字段/ fx:id,使该initialize方法可见而不是从构造函数FXMLLoader调用应该可以解决问题:initialize

public PopUpPersController() {
}

@FXML // you need this annotation for non-public members to be visible to FXMLLoader
private void initialize() {
    txtMa_LohnGesKum.setText("1200.12");
}

确保FXMLLoader应该注入的字段也用@FXML(或public)注释,并且fx:id在 fxml 文件中设置了必需的属性。


推荐阅读