转载
方法:把urlConnection放到线程里面
具体如下:
import java.util.*;import java.net.*;import java.io.*;public class TimedUrlConnection implements Observer { private URLConnection ucon = null; private int time = 300000;//max time out private boolean connected = false; public TimedUrlConnection (URLConnection ucon,int time) { this.ucon = ucon; this.time = time; } public boolean connect() { ObservableURLConnection ouc = new ObservableURLConnection(ucon); ouc.addObserver(this); Thread ouct = new Thread(ouc); ouct.start(); try { ouct.join(time); } catch (InterruptedException i) { //false, but should already be false } return(connected); } public void update(Observable o, Object arg) { connected = true; }//end of public void update(Observable o, Object arg)}
class ObservableURLConnection extends Observable implements Runnable { private URLConnection ucon; public ObservableURLConnection(URLConnection ucon) { this.ucon = ucon; }//end of constructor public void run() { try { ucon.connect(); setChanged(); notifyObservers(); } catch (IOException e) { } }//end of public void run()}
//~~~~~~~~~~~~~~~~~~~Usage~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~URL url=new URL(someurlname);URLConnection urlconn=url.openConnection();TimedUrlConnection timeoutconn=new TimedUrlConnection(urlconn,100000);//time out: 100secondsboolean bconnectok=timeoutconn.connect();if(bconnectok==false){ //urlconn fails to connect in 100seconds}else{
//connect ok
}