Java 为什么不通知观察员?
我正试图在我的学校项目中正在开发的JavaSwing应用程序中实现observer模式。我有两个非常简单的类,一个是单态可观测模型,另一个是观察者 可观察模型:Java 为什么不通知观察员?,java,swing,design-patterns,observer-pattern,Java,Swing,Design Patterns,Observer Pattern,我正试图在我的学校项目中正在开发的JavaSwing应用程序中实现observer模式。我有两个非常简单的类,一个是单态可观测模型,另一个是观察者 可观察模型: public class Model extends Observable { private static Model instance = null; private File selectedImageFile; private int colorsCount; public static Lo
public class Model extends Observable {
private static Model instance = null;
private File selectedImageFile;
private int colorsCount;
public static Logger LOG = Logger.getLogger(Model.class);
private Model() {
this.initialize();
}
private void initialize() {
addObserver(new ModelObserver());
}
public static Model instance() {
if (Model.instance == null) {
Model.instance = new Model();
}
return Model.instance;
}
public void setColorsCount(int colorsCount) {
this.colorsCount = colorsCount;
notifyObservers(Actions.COLORS_COUNT);
}
public void selectedImage(File imageFile) {
this.selectedImageFile = imageFile;
notifyObservers(Actions.SELECTED_IMAGE);
}
public enum Actions {
SELECTED_IMAGE, COLORS_COUNT
}
}
观察者
public class ModelObserver implements Observer {
public static Logger LOG = Logger.getLogger(ModelObserver.class);
@Override
public void update(Observable o, Object arg) {
if (arg instanceof Model.Actions) {
Model.Actions action = (Actions) arg;
switch (action) {
case SELECTED_IMAGE:
selectedImage();
break;
case COLORS_COUNT:
colorsCount();
break;
default:
LOG.warn("Not supported action: " + action);
break;
}
} else {
LOG.warn("Not supported action: " + String.valueOf(arg));
}
}
private void colorsCount() {
LOG.info("Colors count has been changed....");
}
private void selectedImage() {
LOG.info("Image has been changed....");
}
}
一切正常-模型实例寄存器发生更改,但观察员(在我的例子中只有一个)没有得到通知。在方法ModeObserver.update(Observable o,Object arg)
中,没有提到模型已经更改。所以我的问题是观察员没有得到通知
我做错了什么?谢谢。您忘记调用
setChanged()
将可观察对象标记为已更改,这是notifyobservators
实际执行通知所必需的。您忘记调用setChanged()
将可观察对象标记为已更改,notifyobservators
需要它来实际执行通知。您忘记调用setChanged()
将可观察的标记为已更改,这是notifyobservators
实际执行通知所必需的。您忘记调用setChanged())
将可观察到的标记为已更改,这是NotifyObservators
实际执行通知所必需的。要更快获得更好的帮助,请发布SSCCE。要更快获得更好的帮助,请发布SSCCE。要更快获得更好的帮助,请发布SSCCE。要更快获得更好的帮助,请发布SSCCE。