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 楼答案
我设法解决了这个问题。问题是,程序中完全不同部分的一个更改侦听器是
synchronized
。出于某种原因,这导致所有其他更改侦听器都没有收到消息,而是将InvalidationLister
保留在清除状态如果有人提供这方面的信息,我很乐意接受这个答案