我正在使用以下代码使用 Java 下载文件,但我想检测连接何时丢失。我运行了以下代码,在下载过程中我故意断开了互联网连接,但没有引发异常并且挂起。即使打开连接后也没有任何反应。于是,它就永远挂了,没有任何例外。有没有办法让它在连接丢失时抛出异常?谢谢您的帮助!
package toplower.top;
import java.io.FileOutputStream;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.util.*;
import javax.mail.*;
public class testing {
public static void main(String[] args) {
try{
URL website = new URL("http://b128.ve.vc/b/data/128/1735/asd.mp3");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("song.mp3");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
}
catch(Exception e){
System.out.println("got here");
e.printStackTrace();
}
System.out.println("Done downloading...");
}
}
显然,人们可以在套接字上设置超时,我认为这篇文章描述了它:http://technfun.wordpress.com/2009/01/29/networking-in-java-non-blocking-nio-blocking-nio-and-io/
您当前的线程永远阻塞 - 这就是您的根本问题。因此,一种可能的解决方案是切换到异步操作和/或设置超时
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)