2016-05-01 19 views
2

このようなタスクがあり、ユーザーがボタンを押すまでそのタスクが実行されるようにします。しかし、ボタンが押されたときに、スレッドがすぐに途切れることはありません。私はそれが戻る前に何をしていても完了させたい。これをどうすればいいのですか?ユーザーがキャンセルする前にタスクを完了させる

task = new Service(){ 
    @Override 
    protected Task createTask() { 
     System.out.println("Task created"); 
     return new Task<Void>() { 
      @Override 
      protected Void call() throws Exception { 

       while(true) { 
       // Do stuff her 

       } 
       return null; 
      } 
     }; 
    } 
}; 

... 
... 
task.start(); 

答えて

3

ボタンからタスクをキャンセルしてキャンセルを確認するだけです。タスクが「何をしているのか」を完了したときだけチェックすると、キャンセルする前に完了します。例:

task = new Service(){ 
    @Override 
    protected Task createTask() { 
     System.out.println("Task created"); 
     return new Task<Void>() { 
      @Override 
      protected Void call() throws Exception { 

       while(!isCancelled()) { 
        // Do stuff here 

       } 
       return null; 
      } 
     }; 
    } 
}; 

Button cancelButton = new Button("Cancel"); 
cancelButton.setOnAction(e -> task.cancel()); 
関連する問題