2013-07-09 39 views
3

我正在用Java編寫一些代碼以從URL下載東西,並且在我的配置中,一些下載應該由代理處理,而其他處理則由它們處理。拋出之前的Java延遲ConnectException

所以我寫了這個代碼(它的工作原理)來下載所有URL類型,但我想減少延遲時間則拋出ConnectException之前,使代碼可以執行得更快。

URL global_url = new URL("http://google.com"); 
Scanner sc = null; 
try { 
    sc = new Scanner(global_url.openStream()); 
} 
catch (ConnectException e) { 
    try { 
     System.setProperty("http.proxyHost", "my.host"); 
     System.setProperty("http.proxyPort", "my.port"); 
     sc = new Scanner(global_url.openStream()); 
     System.setProperty("http.proxyHost", ""); 
     System.setProperty("http.proxyPort", ""); 
    } 
    catch (ConnectException exc) { 
     //Do stuff 
    } 
} 

現在,它需要約。 10s在拋出異常之前,我想將此時間減少到2s或3s最大值。

我可以得到一些幫助嗎? 謝謝!

+0

'global_url'類型是什麼?我正在欺騙'URL'。 – hexafraction

+0

當然global_url是類型的網址是;) – Jerome

+0

這個代碼不管用。這些系統屬性只能讀取一次,並且在任何情況下都不能清除它們。你需要仔細看看使用java.net.Proxy。 – EJP

回答

5

可以這樣設置超時時間:

long connectTimeout = 3000; 
URL global_url = new URL(urlPath); 
URLConnection con = global_url.openConnection(); 
con.setConnectTimeout(connectTimeout); 

其中connectTimeout你可以設置爲以毫秒爲單位。因爲你需要3s超時,所以將它設置爲3000.

+0

感謝您的回答。然後我給我的掃描儀提供: Scanner sc = new Scanner(con.getInputStream())? – Jerome

+0

也許你應該補充,當超時完成後,它會引發一個SocketTimeoutException而不是一個ConnectExcepion;) 除了從這一點上,它工作正常,再次! – Jerome