在超时时关闭Blackberry HttpConnection

在超时时关闭Blackberry HttpConnection,blackberry,java-me,httpconnection,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();

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

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()
时,会抛出一个异常,但不是cougt,为什么


我收到以下错误:
clientprotocolbase(HttpProtocolBase)。TransitionState(int)
行:484,未找到源:S。

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

首先,连接是一个状态机。它从“设置”状态开始,然后在调用某些方法(需要联系服务器的任何方法)时变为“已连接”状态,最后在服务器或客户端终止连接时变为“已关闭”状态。方法
getResponseCode
可以使连接从所谓的“设置”状态过渡到“连接”状态(如果尚未连接)。您试图立即获取响应代码,甚至不知道连接是否已建立。您甚至没有让连接时间正确连接或关闭自身。即使可以,也可以看看javadocs对该方法的看法:

关闭连接后,对其任何方法(this close()除外)的访问将导致引发IOA异常


如果关闭连接后确实需要执行某些操作,请向连接传递一个“侦听器”对象,以便在连接关闭时可以回调,并传递回响应代码(如果与服务器的连接曾经建立过)。

下面的帖子很好地解释了该场景,按照建议,在关闭连接之前,尝试获取响应代码或读取输入流。