2011-07-03 41 views
0

以下是我的代碼。當我運行這個代碼時,它總是卡住。有時它有時運行循環100次,有時3000次。奇怪的是,它不會拋出一個錯誤,它只是被卡住了。任何人有任何想法?URLConnection卡住了,並沒有拋出錯誤

import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import us.monoid.web.Resty; 


public class Example1 { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

    // Allow certificates - See http://en.wikibooks.org/wiki/Programming:WebObjects/Web_Services/How_to_Trust_Any_SSL_Certificate 
    SSLUtilities.trustAllHostnames(); 
    SSLUtilities.trustAllHttpsCertificates() ; 

    // Variables 
    int i = 0; 
    String askBidURL = "https://www.exchangebitcoins.com/data/depth"; 

    while(true){ 

     System.out.println("Example 1 - Run #" + i); 
     Resty r = new Resty(); 

     try {String jsonw = r.text(askBidURL).toString();} 
     catch (IOException ex){Logger.getLogger(Example1.class.getName()).log(Level.SEVERE, null, ex); } 
     i++; 

    } 
} 
} 
+1

沒有足夠的信息在這裏回答這個問題。您聲明URLConnection存在問題,但不會出現在代碼中的任何地方。另外,會發生什麼?什麼是你得到的錯誤或輸出?它肯定是某種東西,因爲你說它運行n次循環......之後會發生什麼? –

+0

循環運行n次後,它不會移動。該程序不會關閉,也不會拋出異常。它只停留在同一行代碼上。 – FredTheLover

回答

0

Resty.text()或其中的調用可能沒有足夠快地獲取數據。

從HTTPURLConnection的InputStream執行read()操作(即使是在中間使用BufferedInputStream)並將字節逐漸附加到字符串時,我遇到類似情況。它顯然是由於字符串建造得太慢而無法跟上傳入的數據造成的。通過優化這個循環,問題就消失了。

它會隨機發生,大約一次在100到1000個GET中;但是當它發生時它會以某種方式破壞以後的連接,即使外部計時器線程關閉()d卡住的read()的流和連接。

據推測,如果循環沒有足夠快地從InputStream中吃掉數據,似乎有時會放棄傳輸排序,所以InputStream的read()永遠不會看到零大小的塊並且永遠不會結束。

不知道有多少你心情的是在修改您的圖書館......