Java FX - 如何终止ScheduledService

时间:2016-09-14 09:12:54

标签: javafx

我写了一些代码来从互联网上下载一些文件..如果用户点击cancle按钮,这必须停止..我使用cancle()方法来做它..但它没有工作..如何做我这样做..

ScheduledService<Object> service = new ScheduledService<Object>() {
            protected Task<Object> createTask() {
                return new Task<Object>() {
                    protected Object call() {
                        if (checkinternet()) {
                            downloadFiles();
                        }
                        return null;
                    }

                };
            }
        };
        service.start();

在按钮动作事件处理程序中,我调用了停止服务的取消方法。 但它没有成功..

service.cancel();

我该怎么做......

1 个答案:

答案 0 :(得分:1)

没有自动取消任务或服务的方法。

从文档(https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm):

  

取消Task

     

Java中没有可靠的方法来阻止进程中的线程。但是,只要在任务上调用cancel,任务就必须停止处理。该任务应该在其工作期间定期检查是否通过在调用方法体内使用isCancelled方法取消它。

上面的块中引用的示例如下所示:

Task<Integer> task = new Task<Integer>() {
    @Override protected Integer call() throws Exception {
        int iterations;
        for (iterations = 0; iterations < 100000; iterations++) {
            if (isCancelled()) {
               break;
            }
            System.out.println("Iteration " + iterations);
        }
        return iterations;
    }
};

不幸的是,你必须自己实现取消逻辑。

相关问题