2010-12-07 5 views
0

Je développe une application utilisant le plugin Blackberry pour eclipse et j'obtiens l'erreur suivante lors d'un appel à un service web quand j'ai déployé mon application sur un serveur de production et un combiné ... ça marche dans mon simulateur local et environnement de développement. (Je ne peux pas brancher mon simulateur directement à mon environnement de production)BlackBerry - Exception non interceptée: l'application ne répond pas; processus terminé

Uncaught exception: Application app (150) ne répond pas; processus terminé

L'appel est en cours à partir d'un autre thread.

Le fil est passé à mon CustomThreadManager pour exécuter

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(); 

Certains appels fonctionnent tandis que d'autres DonT. Le service Web renvoie les résultats assez rapidement. Je ne sais pas si le service Web est trop lent ou s'il présente des problèmes de thread.

Toute aide appréciée.

Répondre

4

Thread .sleep() ne libère aucun verrou. Cela signifie que votre code pour mettre à jour la barre de progression dans la boucle while maintient le verrou d'événement de l'interface utilisateur et empêche les autres mises à jour de l'interface utilisateur de se terminer jusqu'à ce que la boucle while se termine (thread.isRunning() renvoie false.

Vous pouvez utiliser UiApplication.invokeLater(Runnable, long, boolean) pour planifier une mise à jour de l'interface utilisateur répétitive qui ne contiendra que le verrouillage d'événement pendant l'exécution de Runnable.

Questions connexes