有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java更改侦听器未启动

我有一个枚举:

public enum TimelineState {
    PLAY,
    PAUSE, 
    STOPPED, 
    FINISHED 
}

然后我有一个对象属性:ObjectProperty<TimelineState>

该对象属性由以下对象侦听:

public class CallFinishedListener implements ChangeListener<TimelineState> {

    @Override
    public void changed(ObservableValue<? extends TimelineState> arg0,
            TimelineState arg1, TimelineState arg2) {
            // do stuff
    }

}

我还有一个无效侦听器:

state().addListener(new InvalidationListener() {

            @Override
            public void invalidate() {
                         // do stuff
            }
});

当下面的函数更改状态时,只有无效侦听器触发(为什么?)

@Override
public void pause() {
    this.setState(TimelineState.PAUSE);
}

@Override
public void reset() {
    this.movePlayheadTo(new TimeElapsed(0));
}

protected synchronized void finish() {
    // At this point, the value is TimelineState.FINISHED
    this.pause(); // This changes the state to TimelineState.PAUSE
    this.reset();
    state.set(TimelineState.FINISHED);
}

我能找到的唯一一件事就是这篇博客文章含糊地提到,只有当值“真的改变”时,更改侦听器才会激活 http://blog.netopyr.com/2012/02/08/when-to-use-a-changelistener-or-an-invalidationlistener/


共 (1) 个答案

  1. # 1 楼答案

    我设法解决了这个问题。问题是,程序中完全不同部分的一个更改侦听器是synchronized。出于某种原因,这导致所有其他更改侦听器都没有收到消息,而是将InvalidationLister保留在清除状态

    如果有人提供这方面的信息,我很乐意接受这个答案