2016-09-14 13 views
1

私はインターネットからいくつかのファイルをダウンロードするためのコードを書いています。ユーザーがcancleボタンをクリックすると停止する必要があります。can can()メソッドを使用します。 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

タスクまたはサービスを自動的にキャンセルする方法はありません。

Taskのキャンセル:ドキュメント(https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm)から

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メソッドは働いていました。 –