首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >超时关闭黑莓HttpConnection

超时关闭黑莓HttpConnection
EN

Stack Overflow用户
提问于 2013-03-05 23:00:41
回答 1查看 122关注 0票数 2

我有一个定时器任务,它在连接被触发时关闭它,问题是有时它在连接实际打开之前被触发,如下所示:

代码语言:javascript
运行
复制
try {
    HttpConnection conn = getMyConnection(); // Asume this returns a valid connection object

    // ... At this moment the timer triggers the worker wich closes the connection:
    conn.close(); // This is done by the timeTask before conn.getResponseCode()

    int mCode = conn.getResponseCode(); // BOOOMMMM!!!! EXPLOTION!!!!

    // ... Rest of my code here.

} catch(Throwable e) {
    System.out.println("ups..."); // This never gets called... Why?
}

当我尝试conn.getResponseCode()时,抛出了一个异常,但没有被捕获,为什么?

我得到这个错误:ClientProtocol(HttpProtocolBase).transitionToState(int)行: 484,没有找到源:S。

EN

Stack Overflow用户

回答已采纳

发布于 2013-03-06 01:14:39

该连接位于不同的线程中,并具有自己的生命周期。您正在尝试以同步方式从计时器线程访问它。

首先,连接是一个状态机。它以"setup“状态开始,然后如果在它上面调用了一些方法(任何需要联系服务器的方法),它将更改为"connected”状态,最后当服务器或客户端终止连接时,它将更改为"closed“状态。方法getResponseCode就是其中之一,它可以导致连接从所谓的"setup“状态转换到" connected”状态(如果它还没有连接)。您试图在不知道连接是否已建立的情况下立即获取响应代码。您甚至没有等待连接正确连接或关闭自身的时间。即使可以,也要看看javadoc对close方法的看法:

当连接关闭时,访问除

()之外的任何方法都会导致抛出IOException。

如果您确实需要在连接关闭后执行某些操作,请将"listener“对象传递给连接,以便在连接关闭时它可以回调,并回传响应代码(如果与服务器的连接曾经稳定)。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15227034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档