JavaFX:ScheduledService在每次迭代后都不会触发SUCCEEDED状态更改

时间:2017-06-12 05:11:27

标签: java javafx concurrency

我遇到一个奇怪的错误,ScheduledService在成功完成任何迭代后都不会触发ChangeListener

这是如何复制的:

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();

输出:

READY
SCHEDULED
SCHEDULED
RUNNING
onSucceeded() triggered!
READY
SCHEDULED
SCHEDULED
RUNNING
onSucceeded() triggered!
READY
SCHEDULED
SCHEDULED

这很奇怪,因为触发了onSucceeded()事件,但ChangeListener没有得到相应的值更改。当然,我绝对可以使用setOnSucceeded()来完成我的所有工作,但它仍然很奇怪,因为我已处理ChangeListenerSUCCEEDED以外的所有状态。

这是否算作API中的错误?

0 个答案:

没有答案