2013-07-12 4 views
0

내 코드는 인터넷에서 파일을 다운로드하는 API 메소드를 호출합니다. 다운로드에는 많은 시간이 걸릴 수 있기 때문에 배경 스레드가 파일 다운로드를 처리하는 동안 진행률 표시 줄이 표시된 창을 닫으면 다운로드를 취소 할 수있는 기능을 사용자에게 제공하고 싶습니다.이 작업을 수행하는 스레드를 종료하지 않고 파일 업로드/다운로드 작업을 취소하는 방법은 무엇입니까?

API 메서드에서 호출 한 코드를 제어 할 수 있는지 잘 모르겠습니다. 다운로드 작업을 취소해야한다는 신호를 보내는 옵션이 없다고 가정합니다.

이 가정이 맞으면 실제 파일 다운로드를 수행하는 백그라운드 스레드를 중단하거나 중단하거나 종료하지 않고도 사용자 요청에 따라 파일 다운로드 작업을 종료 할 수 있습니까?

+0

소켓에 액세스 할 수 있으면 닫고 스레드에 예외가 발생합니다. 그렇지 않으면 두 스레드 (취소 리스너 및 다운로드 파일)가 포함 된 프로세스에서 실행하는 것이 좋습니다. 다운로드 파일은 데몬입니다. 모든 취소 방법에 대해 취소 스레드에 신호를 보내면 스레드가 파일 다운로드를 자동으로 종료하는 작업을 완료합니다. [this] (http://stackoverflow.com/questions/17577908/java-why- 이 코드가 작동하지 않는 무한 루프/17580110 # 17580110) –

답변

1

제대로 디자인 된 파일 다운로드 방법이 중단 될 것으로 예상됩니다. 따라서 다운로드가 완료된 스레드를 중단해야합니다. 다운로드가 취소되어야합니다 (이 메서드는 InterruptedException을 throw해야합니다).

다운로드 스레드에서 예외를 발견하면 수행 할 작업 (예 : 종료하지 않음)을 제출할 때까지 기다릴 수 있습니다.

+0

제가 아파치 공유 파일 다운로드 방법이 중단 될 수 있다고 가정하는 것이 맞습니까? –

+0

@JSmith 그들은 InterruptedException을 던집니까? 그들이 그렇게한다면 그들은 당신이 안전하게 있다고 추측 할 수 있습니다. 그리고 어쨌든 테스트하는 것이 매우 쉽습니다. 그들은 아마 다른 스레드에서 연결을 닫습니다 (예를 들어) 해결 방법이 없을 경우. – assylias