【发布时间】:2016-03-04 01:18:20
【问题描述】:
嘿,我有一个 MVC Java 应用程序,它使用观察者模式来通知我对每次更改的看法。
我有一个入门类来初始化所有类并为我的 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 类并调用“作为 Java 应用程序运行”时,我的模型会加载一个默认值,然后调用 writeFile()。文件被创建,setChanged() 和notifyObserver() 被调用,但update() 不会被调用。有什么我错过的吗?
【问题讨论】:
-
“notifyObservers”方法是什么样子的?
-
只是来自
java.util.Observable的标准方法调用,我自己没有写任何东西。 -
"当我启动程序时" ...这意味着在模型的构造函数中? ...在添加观察者之前执行哪个?你可以尝试给 JSONModel 一个构造函数,你可以给它一个观察者。然后在ctor内部首先添加观察者,然后进行其余的初始化。
-
抱歉写的不清楚。但我认为你说得有道理。我去看看。
-
@Fildor 解决了我的问题。
标签: java model-view-controller observer-pattern