2016-09-14 43 views
1

我写了一个小代码从网上下载一些文件..如果用户点击cancle按钮,这个必须停止..我使用cancle()方法做它..但它没有work..how做呢..Java FX - 如何终止ScheduledService

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

我也有类似的问题,EJB定时器服务。一旦工作处于运行状态,调用cancel并不会中止它。这项工作只会在完成目前的“工作”之后停止。我想知道什么方法可以用来中止! – cdaiga

+0

你试过.setOnCancelled()listner .. –

回答

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; 
    } 
}; 

所以,你将不得不自己来实现取消逻辑,很遗憾。

+0

cancle method working .. –