2016-09-14 4 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 타이머 서비스에서도 비슷한 문제가 발생했습니다. 작업이 실행 중 상태가되면 취소를 호출해도 작업이 중단되지 않습니다. 작업은 현재 작업 인 "작업 완료"후에 만 중지됩니다. 어떤 방법으로 중단 할 수 있을지 궁금해! – 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 method worked .. –