我在程序中使用HttpURLConnection连接URL,但有时会连接的时间过长,一直等待下去
我已经设置了超时,但是感觉没有效果
connection.setConnectTimeout(connectTimeout*1000);
connection.setReadTimeout(readTimeout*1000);
然后获取并解析页面
connection.connect();
InputSource inpSrc = new InputSource(new InputStreamReader(connection.getInputStream(),"utf-8"));
inpSrc.setEncoding(encoding);
SAXReader reader = new SAXReader();
Document doc = reader.read(inpSrc);   //程序有时会卡死在这一句上我想知道是什么原因导致的程序无限等待,还有应该如何解决

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【hhxkss】截止到2008-07-28 11:01:38的历史汇总数据(不包括此帖):
    发帖的总数量:2                        发帖的总分数:20                       每贴平均分数:10                       
    回帖的总数量:33                       得分贴总数量:12                       回帖的得分率:36%                      
    结贴的总数量:2                        结贴的总分数:20                       
    无满意结贴数:1                        无满意结贴分:30                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:50.00 %               无满意结分率:150.00%                  
    敬礼!
      

  2.   

    你用的JDK版本是多少?
    //JDK5.0及其以后的版本支持
    connection.setConnectTimeout(10000);
    connection.setReadTimeout(10000);
    //JDK5.0以前的版本支持
    System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
    System.setProperty("sun.net.client.defaultReadTimeout", "30000");
      

  3.   

    Document doc = reader.read(inpSrc);  //程序有时会卡死在这一句上 
    SAXReader 是读取XML文件的,如果XML文件的格式不对,可能出现问题!
      

  4.   

    试试改成先把xml文件读取下来再做分析。
    没研究过SAX的源码,不知道在read的时候你设置的ReadTimeout有没有效果。
      

  5.   


    这种现象不是每次都会出现的,大概千分之一的概率,但是一旦出现程序就假死了。
    程序我已经追踪过了,卡在这一句 Document doc = reader.read(inpSrc);
      

  6.   

    我觉得还是inpSrc 所指向的那个xml文件的格式问题,如果能先得到这个文件,然后用reader读入它,如果出错的话,可以先分析一下这个xml文件内容,看是否符合规范。
      

  7.   


    如果是xml文件格式的问题会报异常的,我现在怀疑是因为无法收到完整的数据而发生长时间阻塞,准备用下面的方法解决超时问题。
    http://blog.chinaunix.net/u1/56194/showart_462504.html