2010-12-07 3 views
0

Я разрабатываю приложение, использующее плагин Blackberry для eclipse, и я получаю следующую ошибку при обращении к веб-службе, когда я развернул свое приложение на производственный сервер и телефон ... он работает в моем локальный симулятор и среда разработки. (Я не могу подключить мой тренажер непосредственно к моей производственной среде)BlackBerry - исключение для неактивных: приложение не отвечает; процесс завершен

неперехваченного исключения: Application приложения (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(); 

Некоторые вызовы работают в то время как другие не делают. Веб-сервис возвращает результаты довольно быстро, поэтому я не уверен, что его веб-сервис слишком медленный или проблемы с поточной обработкой.

Любая помощь приветствуется.

ответ

4

Thread .sleep() не выпускает никаких замков. Это означает, что ваш код для обновления строки выполнения во время цикла удерживает блокировку событий пользовательского интерфейса и предотвращает другие обновления пользовательского интерфейса до тех пор, пока цикл while не завершится - в этом случае, когда thread.isRunning() возвращает значение false.

Вы можете использовать UiApplication.invokeLater(Runnable, long, boolean), чтобы запланировать повторное обновление пользовательского интерфейса, которое будет удерживать блокировку событий только во время выполнения Runnable.