1.问题描述:
在一个JavaFx项目中需要动态修改一个Text的数据
@FXML
private Text dateText = new Text();
调用自定义的更新方法后界面没有改变,但是打印getText()发现已经是修改后的值…于是又设置了一个按钮,通过在点击按钮的响应方法中修改Text的值,竟然成功了。
//正常的修改方法
public void updateDateText() {
Platform.runLater(new Runnable() {
@Override
public void run() {
String timeStr = date.toString();
dateText.setText(timeStr);
}
});
}
//按钮的响应方法
@FXML
private void update() {
Platform.runLater(new Runnable() {
@Override
public void run() {
String timeStr = date.toString();
dateText.setText(timeStr);
}
});
}
两个方法内部逻辑是完全一样的,但结果却不一样
于是我在两个方法内分别打印了一次dateText对象的hashcode,发现竟然不一样!
2.定位问题
我尝试将
private Text dateText = new Text();
修改为:
private Text dateText;
但是引发了空指针异常
也就是说@FXML注解修饰的dateText对象没有注入
先看看我的主类代码:
这行代码使程序产生了两个MainController类的实例
MainController mainController = new MainController();
3.解决方案
修改MainController
public static MainController mainController;
并在初始化函数中
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
mainController = this;
}