1

HttpConnectionを使用するミッドレットを開発しました。接続を行う別のスレッドがあります。

今私がしたことは、そのスレッドにcancel()と呼ばれる別のメソッドを提供することでした。これは、run()メソッドでHttpConnectionが使用されている場合でもHttpConnection.close()を呼び出します。

このようにして、接続を中断/キャンセルします。これは私のSunワイヤレスエミュレーターでは正常に機能しますが、NokiaデバイスとNokiaSDK2では機能しません。

1つのスレッドがHttpConnectionを使用していて、別のスレッドがその上でclose()を呼び出している可能性はありますか?例外がスローされることを期待していましたが、代わりにミッドレットがハングします。

4

1 に答える 1

0

IOを実行するときは、ドキュメントで特に明記されていない限り、ほとんどのメソッドがブロックされる可能性があることに注意する必要があります。HTTPConnection.close()はそのようなメソッドの1つです。

私の推測では(コードを共有していないため)、メインGUIスレッドからclose()を呼び出して、メソッドがブロックされたときにMIDletをハングさせます。おそらく最善の方法は、接続を行うスレッドに「中止された」ブール値を設定し、戦略的な場所でそれをチェックすることです。別の方法として、ブロックする可能性のあるクローズ呼び出しを行う「クローズスレッド」を生成できます。

于 2012-09-17T07:47:02.553 に答える