2013-07-12 71 views
0

我的代码调用从互联网下载文件的API方法。由于下载需要很长时间,因此如果用户在后台线程处理文件下载时关闭显示进度条的窗口,我想让用户能够取消下载。如何在不终止执行此操作的线程的情况下取消文件上载/下载操作?

我不确定我对API方法调用的代码有任何控制权,所以我假设我没有选择通知此代码需要取消下载操作。

如果这个假设是正确的,我该如何终止用户请求上的文件下载操作,而不必中止/中断或以其他方式终止执行实际文件下载的后台线程?

+0

如果你有权访问套接字,就关闭它,它会向线程抛出一个异常,否则我建议你通过一个包含两个线程(取消监听器和下载文件)的进程运行它,该文件下载文件是守护进程,任何取消方法只是发出取消线程的信号,然后取消线程就完成了它的工作,导致文件下载静默地杀死像[this](http://stackoverflow.com/questions/17577908/java-why- is-this-code-not-working-infinite-loop/17580110#17580110) – 2013-07-12 19:55:02

回答

1

我期望一个设计合理的文件下载方法是可以中断的。所以你需要中断正在执行下载的线程,这应该取消下载(该方法应该抛出一个InterruptedException)。

一旦您从下载线程中发现异常,您可以决定如何处理,例如等待提交新文件下载(即不退出)。

+0

我正确地假设apache commons文件的下载方法是可中断的吗? –

+0

@JSmith他们是否会抛出InterruptedException?如果他们这样做,那么你可以安全地假设他们是。无论如何,测试相当容易。如果他们不存在可能的解决方法(例如通过关闭另一个线程的连接)。 – assylias

相关问题