我在加载相应的FXML文件时尝试设置TextField
的值,但是当我尝试在方法中的TextField
上设置默认值时在加载FXML的地方,在writeBtnClick()
方法的情况下,它会抛出NullPointerException
。
根据我的理解,在加载FXML之前不会初始化元素,因此无论出于何种原因,在加载FXML文件后,该元素仍然无法识别。
public class Controller implements Initializable {
@FXML private TextField textField;
public void initialize(URL arg0, ResourceBundle arg1) {
}
public void writeBtnClick(ActionEvent event) throws IOException {
Stage stage = (Stage) ((Node)event.getSource()).getScene().getWindow();
stage.setScene(new Scene((Parent) FXMLLoader.load(getClass().getResource("WriteScene.fxml"))));
// the textfield I'm trying to set default value on
// this throws a NullPointerException
textField.setText("name");
}
为了解决这个问题,我将setText()
放在initialize()
中,但当然如果在加载正确的fxml文件之前调用控制器类,也会导致NullPointerException
。
这是我能想到的最好的方法,但显然它非常脏,我觉得应该有一种方法来设置场景实际加载的writeBtnClick()
方法的值。
public void initialize(URL arg0, ResourceBundle arg1) {
// very hacky solution
if (textField != null) {
textField.setText("name");
}
}
答案 0 :(得分:-1)
我知道这听起来很疯狂,但是从控制器定义中移除implements Initializable
,但请保留initialize
方法。 Ther将不再是NPE了。
如果你仍然会在GUI元素上获得一些NPE,请仔细检查@fx:id
标签,因为最有可能是拼写错误(区分大小写),并且充气机不会抱怨它。