Java 控制器的Getter方法返回null

Java 控制器的Getter方法返回null,java,javafx,Java,Javafx,当我将getter和setter放在一个方法中,然后在main方法中调用该方法时,尽管已将该值设置为其他值,但仍会得到null值!此外,我没有从编译器收到任何错误,因此我确定这是某个地方的逻辑错误,但我无法找出它。您应该在控制器更新数据的初始化中替换此错误。 public class ControllerUpdateData implements Initializable { @FXML private TextField txt2; @FXML private TextField txt3;

当我将getter和setter放在一个方法中,然后在main方法中调用该方法时,尽管已将该值设置为其他值,但仍会得到null值!此外,我没有从编译器收到任何错误,因此我确定这是某个地方的逻辑错误,但我无法找出它。

您应该在
控制器更新数据的
初始化
中替换此错误。

public class ControllerUpdateData implements Initializable {
@FXML
private TextField txt2;
@FXML
private TextField txt3;
@FXML
private TextField txt4;
@FXML
private TextField txt1;

@FXML
private void updateData() {
    ControllerMain controllerMain = new ControllerMain();
    try (Connection con = new DBConnect().getConnected();
         PreparedStatement prep = con.prepareStatement("UPDATE job.job SET company_name=?,phone=?,address=?,other=? WHERE job.id=?;", Statement.RETURN_GENERATED_KEYS)) {
        prep.setString(1, txt1.getText());
        prep.setInt(2, Integer.parseInt(txt2.getText()));
        prep.setString(3, txt3.getText());
        prep.setString(4, txt4.getText());
        prep.setInt(5, 1);
        prep.execute();
        txt1.clear();
        txt2.clear();
        txt3.clear();
        txt4.clear();
        controllerMain.loadDatabaseData();
    } catch (IllegalAccessException | InstantiationException | ClassNotFoundException | SQLException e) {
        System.err.println("Error: " + e.getMessage());
    } catch (Exception e) {
        e.printStackTrace();
    }
}


@Override
public void initialize(URL location, ResourceBundle resources) {
    ControllerMain controllerMain = new ControllerMain(); // get Null
    txt1.setText(controllerMain.getNameCompany()); // get Null
    txt2.setText(String.valueOf(controllerMain.getPhone())); // get Null
    txt3.setText(controllerMain.getAddress()); // get Null
    txt4.setText(controllerMain.getOther()); // 
}}
。。。与

ControllerMain controllerMain = new ControllerMain(); // get Null
问题是,如果您只是使用其默认构造函数创建
ControllerMain
的实例,则不会调用
initialize
方法,因此您的类成员都不会被初始化

您应该使用
FXMLLoader
加载FXML文件,而
load
上的
FXMLLoader
将创建关联控制器类的实例,并在该实例上调用
initialize
方法。可以使用该方法检索此对象


以下是如何从控制器加载FXML文件。

您应该在
控制器更新数据
初始化
中替换此文件

public class ControllerUpdateData implements Initializable {
@FXML
private TextField txt2;
@FXML
private TextField txt3;
@FXML
private TextField txt4;
@FXML
private TextField txt1;

@FXML
private void updateData() {
    ControllerMain controllerMain = new ControllerMain();
    try (Connection con = new DBConnect().getConnected();
         PreparedStatement prep = con.prepareStatement("UPDATE job.job SET company_name=?,phone=?,address=?,other=? WHERE job.id=?;", Statement.RETURN_GENERATED_KEYS)) {
        prep.setString(1, txt1.getText());
        prep.setInt(2, Integer.parseInt(txt2.getText()));
        prep.setString(3, txt3.getText());
        prep.setString(4, txt4.getText());
        prep.setInt(5, 1);
        prep.execute();
        txt1.clear();
        txt2.clear();
        txt3.clear();
        txt4.clear();
        controllerMain.loadDatabaseData();
    } catch (IllegalAccessException | InstantiationException | ClassNotFoundException | SQLException e) {
        System.err.println("Error: " + e.getMessage());
    } catch (Exception e) {
        e.printStackTrace();
    }
}


@Override
public void initialize(URL location, ResourceBundle resources) {
    ControllerMain controllerMain = new ControllerMain(); // get Null
    txt1.setText(controllerMain.getNameCompany()); // get Null
    txt2.setText(String.valueOf(controllerMain.getPhone())); // get Null
    txt3.setText(controllerMain.getAddress()); // get Null
    txt4.setText(controllerMain.getOther()); // 
}}
。。。与

ControllerMain controllerMain = new ControllerMain(); // get Null
问题是,如果您只是使用其默认构造函数创建
ControllerMain
的实例,则不会调用
initialize
方法,因此您的类成员都不会被初始化

您应该使用
FXMLLoader
加载FXML文件,而
load
上的
FXMLLoader
将创建关联控制器类的实例,并在该实例上调用
initialize
方法。可以使用该方法检索此对象


以下是如何从控制器加载FXML文件。

那么,您是否想知道为什么
txt1.setText(controllerMain.getNameCompany());//get Null
此行抛出一个NullPointerException?System.out.println(controllerMain.getNameCompany());//打印空值未读取。。。请看,您想知道为什么
txt1.setText(controllerMain.getNameCompany());//get Null
此行抛出一个NullPointerException?System.out.println(controllerMain.getNameCompany());//打印空值未读取。。。请看