0

Eclipse用のBlackberryプラグインを使用してアプリケーションを開発していますが、アプリケーションを本番サーバーと受話器にデプロイしたときにWebサービスを呼び出すと、次のエラーが発生します...ローカルのシミュレーターと開発で機能します環境。(シミュレーターを実稼働環境に直接接続することはできません)

キャッチされない例外:アプリケーションapp(150)が応答していません。プロセスが終了しました

呼び出しは別のスレッドから行われています。

スレッドは実行するために私のCustomThreadManagerに渡されます

ClientChangeThread thread = new ClientChangeThread();
CustomThreadManager.Start(thread, true);

CustomThreadManager

ProgressPopup _progress = null; 
    if(showProgress){
        _progress = new ProgressPopup("Loading...");
        _progress.Open();
    }
    thread.start();             

    while (thread.isRunning())
    {
        try
        {
            CustomThread.sleep(300);
            if(showProgress){
                _progress.doPaint();
            }
        }
        catch (InterruptedException e)
        {
            Dialog.alert("Error contacting webservice\n" + e.getMessage());
            Functions.moveBack();
        }                   
    }
    if(showProgress)
        _progress.Close();

一部の通話は機能しますが、他の通話は機能しません。Webサービスは結果をかなり迅速に返すため、Webサービスが遅すぎるのか、スレッドに問題があるのか​​わかりません。

助けていただければ幸いです。

4

1 に答える 1

4

Thread .sleep() はロックを解放しません。これは、while ループでプログレス バーを更新するコードが UI イベント ロックを保持していることを意味し、while ループが終了するまで (この場合は thread.isRunning() が false を返すまで)、他の UI 更新が行われないようにします。

UiApplication.invokeLater(Runnable, long, boolean)Runnable の実行中にのみイベント ロックを保持する繰り返しの UI 更新をスケジュールするために使用できます。

于 2010-12-07T15:37:13.170 に答える