在超时时关闭Blackberry HttpConnection

时间:2013-03-05 15:00:41

标签: blackberry java-me httpconnection

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

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。

1 个答案:

答案 0 :(得分:2)

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

首先,连接是状态机。它始于"设置"状态,然后改为"连接"如果调用某些方法(任何需要联系服务器的方法),最后它改为"关闭"当服务器或客户端终止连接时的状态。方法getResponseCode是可以导致连接从所谓的"设置"转换的方法之一。陈述到"连接"状态,如果它还没有连接。您试图立即获取响应代码,甚至不知道连接是否已建立。您甚至没有让连接时间正确连接或关闭。即使你可以,看看javadocs对close方法的评价:

  

当连接关闭时,访问除此close()之外的任何方法都将导致抛出IOException。

如果你真的需要在关闭后做一些事情,那么通过一个"听众"对象连接,以便它可以在连接关闭时回调,并传回响应代码(如果与服务器的连接已经建立)。