java-DefaultHttpClient 中的 Timeout事件

问题描述

DefaultHttpClient 中的 Timeout事件

我对于 timeouts 在 DefaultHttpClient 中如何运行很费解。
我用的下面的代码:

private DefaultHttpClient createHttpClient() {
        HttpParams my_httpParams = new BasicHttpParams();

        HttpConnectionParams.setConnectionTimeout(my_httpParams, 3000);
        HttpConnectionParams.setSoTimeout(my_httpParams, 15000);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        ThreadSafeClientConnManager multiThreadedConnectionManager = new ThreadSafeClientConnManager(my_httpParams, registry);

        DefaultHttpClient httpclient = new DefaultHttpClient(multiThreadedConnectionManager, my_httpParams);

        return httpclient;
}

String url = "http://www.example.com";

DefaultHttpClient httpclient = createHttpClient();
HttpGet httpget = new HttpGet(url);

try {
    HttpResponse response = httpclient.execute(httpget);
    StatusLine statusLine = response.getStatusLine();
    mStatusCode = statusLine.getStatusCode();

    if (mStatusCode == 200){
        content = EntityUtils.toString(response.getEntity());
    }

} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (IllegalStateException e){
    e.printStackTrace();
}

执行15秒后,不能得到所有的数据,是不是就会出现异常呢?是哪个方法有问题呢?

我觉得是.execute(httpget)方法的问题。但是抛出的异常是 ClientProtocolException and IOException。有谁能给我解释下是什么原因?谢谢!

解决方案

它在 execute() 抛出异常。 SocketTimeoutException 的父类是一个 IOException。一个 catch 模块处理IOException。

HttpParams my_httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(my_httpParams, 3000);
HttpConnectionParams.setSoTimeout(my_httpParams, 1);
DefaultHttpClient defaultHttpClient = new DefaultHttpClient(my_httpParams);
HttpGet httpGet = new HttpGet("http://google.com");
defaultHttpClient.execute(httpGet);

它导致这个异常:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    ...
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)

你也可以通过捕捉和处理 IOException 有选择性的处理异常。

try
{
    // Your code
}
catch (SocketTimeoutException e)
{
    // handle timeouts
    e.printStackTrace();
}
catch (IOException e)
{
    // handle other IO exceptions
    e.printStackTrace();
}

解决方案二:

报错应该是在这句:HttpResponse response = httpclient.execute(httpget);
我本地测试异常如下:
org.apache.http.conn.ConnectTimeoutException: Connect to www.example.com:80 timed out
我用的是httpclient4.2

时间: 2024-11-30 19:10:02

java-DefaultHttpClient 中的 Timeout事件的相关文章

关于java界面中按钮执行事件的问题

问题描述 关于java界面中按钮执行事件的问题 我用JAVA在一个包中写了MultiThreadMatrix.java和Jiemian.java.MultiThreadMatrix.java是一个并行矩阵计算程序,怎么让Jiemian.java中的一个按钮b3,点击b3执行MultiThreadMatrix.java,并将结果输出在Jiemian.java的文本框中. MultiThreadMatrix.java的打印的结果是,先让你输入想建立的线程个数,然后输出每个线程计算哪一行. 下面是Mu

Java Swing中使用双击事件

今天自己写个小程序碰到了这个问题,在网上搜了一下人家的思路,整理了一下代码可以运行,感觉不错!直接在JBuilder中新建一个应用程序,至于具体步骤就不描述了,此代码没有main函数无法直接运行.下面我贴出在Frame1中的代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;import com.borland.jbcl.layout.*;import java.util.Date; public class Fra

Java中窗口关闭事件。

问题描述 Java中窗口关闭事件. 程序代码如下: package com.packageTemp; import java.awt.event.*; import javax.swing.*; import java.awt.*; public class MouseAdapterTest { JFrame f=null; JButton btn=null; public static void main(String[] args) { new MouseAdapterTest(); } /

java 日历中用户创建一个跨天的事件提醒,那么我的java日历应当如何去记录并打印出这样的事件呢?

问题描述 java 日历中用户创建一个跨天的事件提醒,那么我的java日历应当如何去记录并打印出这样的事件呢? 一个班级假如有100个同学,现在我们按照学号随机选择连续学号的42名同学,这42名同学一排7人分为6排,然后按照他们这一年来参加活动的多少来给分,规定一个同学参加一次班级活动就给这位同学1分,参加一次团体表演(你可以认为参加团体表演的人都是按照学号顺序相邻的,比如从1到10号的同学,他们一块进行了一场团体表演,学号15-30的16位同学一块进行了一次团体表演等,这些人每人都能获得1分)

详解Java图形化编程中的鼠标事件设计_java

鼠标事件的事件源往往与容器相关,当鼠标进入容器.离开容器,或者在容器中单击鼠标.拖动鼠标时都会发生鼠标事件.java语言为处理鼠标事件提供两个接口:MouseListener,MouseMotionListener接口.MouseListener接口 MouseListener接口能处理5种鼠标事件:按下鼠标,释放鼠标,点击鼠标.鼠标进入.鼠标退出.相应的方法有: (1) getX():鼠标的X坐标 (2) getY():鼠标的Y坐标 (3) getModifiers():获取鼠标的左键或右键.

关于java多线程中的join方法

问题描述 关于java多线程中的join方法 1.主线程可能在子线程结束之前 结束吗?如果可能的话 举一个例子 2.如何理解join方法, 结合实际应用. 非常感谢非常感谢!!! 解决方案 关于join,参考:http://www.blogjava.net/jnbzwm/articles/330549.html 解决方案二: 主线程可能在子线程结束之前 结束吗 一般来说不可以,但是也不一定,如果子线程在执行finally中的代码,应该会等它执行完了才退出. 晕,join方法和什么"让主线程等子线

第三讲 Java语言中的面向对象特性

对象 [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道java语言在面向对象编程方面有何独特的特点吗? 难点: 1. 理解方法重载和方法重写,不要混淆了两者的使用. 2. 类变量和类方法的使用. 3. 接口的使用.3.1 面向对象技术基础 3.1.1 面向对象的基本概念 面向对象的基本思想 面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象.类

教你怎样在java程序中引入neo4j数据库

随着关系型数据库在某些方面的力不从心,了解当下流行的各种数据库模式的特点和性能,无疑会给我们提供更多的选择和方向. neo4j是一种图形数据库,在遍历和关联查询方面具有突出的优势.废话少说,深入了解neo4j之前,先让我们尝试一下怎样在程序中使用neo4j. neo4j采用java语言开发,如果我们要在java程序中以内嵌方式使用neo4j,只需导入neo4j的对应包即可. 首先,我们来创建一个maven项目并修改pom.xml添加对neo4j的依赖. <?xml version="1.0

Java Swing中的键盘事件处理

在java Swing编程过程中,经常需要处理键盘事件,例如处理快捷键等.这里就介绍如何定义键盘事件,以及如何处理这些事件. 在jdk1.2中,分别针对Jcomponent和Text类的对象定制了不同的处理键盘事件的方法:在Jcomponent中,定义了registerKeyboardAction方法,使用这个方法来将需要处理的键盘事件以及处理事件的行为绑定在一起.Text类中具有keymap对象,同Jcomponent中的处理方法类似,这个对象保存着需要处理的键盘事件和对应的行为. 而在jdk