Java 控制器的Getter方法返回null
当我将getter和setter放在一个方法中,然后在main方法中调用该方法时,尽管已将该值设置为其他值,但仍会得到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;
控制器更新数据的初始化中替换此错误。
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());//打印空值未读取。。。请看