Java 为什么不通知观察员?

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

我正试图在我的学校项目中正在开发的JavaSwing应用程序中实现observer模式。我有两个非常简单的类,一个是单态可观测模型,另一个是观察者

可观察模型:

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。