观察者不调用更新方法

Observer doesn't call update method

嘿,我有一个 MVC Java 应用程序,它使用观察者模式在每次更改时通知我的视图。
我有一个启动器 class 来初始化所有 classes 并为我的 MVC 模式设置所有内容。

public static void main(String[] args) {
        FXView view = new FXView();
        JSONModel model = new JSONModel();
        model.addObserver(view);
        Controller controller = new Controller(view, model);
        view.registerController(controller);
        FXView.launch(FXView.class);
}

我有一个从 Observable 扩展而来的模型,并且有一个写入文件的方法。我想打电话给 setChanged()notifyObserver().

public void writeFile() {
        try {
            FileWriter file = new FileWriter("C://path/to/file.json");
            file.write(obj.toJSONString());
            file.flush();
            file.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        setChanged();
        notifyObservers(obj);
}

每次写入文件时,我都希望我的视图了解它。我的观点确实实现了 Observer,因此具有 update() 方法。

@Override
public void update(Observable o, Object arg) {
    JSONModel model = (JSONModel)o;
    this.obj = model.getObj();
}

使用调试器我无法检测到更新方法的调用。 当我启动程序时 --> 当我转到我的 Starter class 并调用 "Run as Java Application" 时,我的模型加载默认值然后调用 writeFile()。文件被创建, setChanged()notifyObserver() 被调用,但 update() 不会被调用。有什么我错过的吗?

看起来,在启动阶段调用 notifyOberservers 是在添加 Oberserver 之前完成的。

这可以通过创建一个构造函数来解决,该构造函数在调用更新之前先接受并添加一个观察者服务器。

另一种方法是使用空构造函数并将初始化代码移至其他方法。所以可以在创建实例后调用addObserver,然后调用初始化方法。

就我个人而言,我会选择第一个,因为我们不希望能够创建未初始化(= 未定义状态)的实例。