2016-09-14 44 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 .. –