JavaFX:ScheduledService不会在每次迭代后触发成功状态更改
我遇到了一个奇怪的错误,JavaFX:ScheduledService不会在每次迭代后触发成功状态更改,java,javafx,concurrency,Java,Javafx,Concurrency,我遇到了一个奇怪的错误,ScheduledService在成功完成任何迭代时都不会触发changelister 这是如何复制的: final ScheduledService<Void> service = new ScheduledService<Void>() { @Override protected Task<Void> createTask() { // TODO Auto-generated method s
ScheduledService
在成功完成任何迭代时都不会触发changelister
这是如何复制的:
final ScheduledService<Void> service = new ScheduledService<Void>()
{
@Override
protected Task<Void> createTask()
{
// TODO Auto-generated method stub
return new Task<Void>()
{
@Override
protected Void call() throws Exception
{
// TODO Auto-generated method stub
return null;
}
};
}
};
service.setOnSucceeded(event ->
{
System.out.println("onSucceeded() triggered!");
});
service.stateProperty().addListener((obs, o, n) ->
{
System.out.println(n);
});
service.setPeriod(Duration.seconds(2));
service.start();
这很奇怪,因为触发了onSucceeded()
事件,但ChangeListener
没有得到相应的值更改。当然,我完全可以使用setOnSucceeded()
来完成我的所有工作,但这仍然很奇怪,因为我已经处理了ChangeListener
中的所有状态,除了成功
这算是API中的一个bug吗?是的,看起来像个bug。我不太清楚它到底在哪里:
服务
在开始任务时将其状态绑定到任务
的状态,并且有一些相当复杂的代码在任务完成时解除绑定。看起来,ScheduledService
在某种程度上过早地解除了该状态的绑定。同样奇怪的是,你看到了两个到计划的
@James\u D的转换,似乎我发现有人同意我的观点,认为API有些奇怪。为此提交了一份bug报告,但考虑到存在解决方法,它可能会在JDK10或11中得到修复。
READY
SCHEDULED
SCHEDULED
RUNNING
onSucceeded() triggered!
READY
SCHEDULED
SCHEDULED
RUNNING
onSucceeded() triggered!
READY
SCHEDULED
SCHEDULED