2010-11-25 6 views
0

J'ai une classe de threads HttpConnection. quand j'arrête httpConnection, je montre ce message. comment devrait-je arrêter httpConnection ??Exception non interceptée: l'opération de blocage n'est pas autorisée sur le fil d'expédition d'événement sur BlackBerry

Console de sortie Blackberry:

RuntimeException 
blocking operation not permitted on event dispatch thread 
net_rim_cldc-10 
EventThreadCheck 
throwException 
0x3434 
net_rim_cldc_io_tcp 
Protocol 
<private> 
0x18B8 
net_rim_cldc_io_tcp 
Protocol 
outputStreamClosed 
0xB2D 
net_rim_cldc_io_tcp 
TcpOutputStream 
close 
0x40BF 
net_rim_os-2 
ClientProtocol 
close 
0x154E 
CepVizyon-2 
Http 
cancel 
0x174F 
CepVizyon-2 
Camera 
cancel 
0x6E7 
CepVizyon 
ViewCam 
close 
0xE79 
net_rim_cldc-7 
Screen 
onClose 
0x5DAC 
net_rim_cldc-7 
Screen 
keyCharUnhandled 
0x5C58 
net_rim_cldc-9 
MainScreen 
keyCharUnhandled 
0x23D7 
net_rim_cldc-7 
Screen 
dispatchKeyEvent 
0x51DB 
net_rim_cldc-7 
Screen 
processKeyEvent 
0x718D 
net_rim_cldc-7 
UiEngineImpl 
processMessage 
0x9E3C 
net_rim_cldc-4 
Application 
processNextMessage 
0x1073 
net_rim_cldc-4 
Application 
enterEventDispatcher 
0x775 
CepVizyon-2 
CepVizyonMain 
main 
0x1175 

parties de ma classe de connexion:

public abstract class Http extends Thread{ 
    protected HttpConnection httpConnection; 
HttpConnectionFactory factory; 
protected static Base64 base64; 

private boolean cancel = false; 
/** bağlantının yapılcağı adres */ 
protected String url = ""; 
/** paremetre olarak gönderilecek data */ 
protected String queryString = ""; 

    ... 

public void cancel() { 
     try { 
      if (httpConnection != null) 
       httpConnection.close(); 
      if(factory!=null) 
       factory.cancel(); 
     } catch (IOException ex) { 
     } 
     cancel = true; 
    } 

partie de ma classe d'écran:

public void close() { 
     super.close(); 
     StaticVar.ActiveCam.cancel(); 
//  CameraListScreen screen = new CameraListScreen(); 
//  UiApplication.getUiApplication().pushScreen(screen); 
// 
    } 

et une partie de la classe de l'appareil photo/* ActiveCam de ce annuler est ici /:

// finishes connection. 
    public void cancel() { 
     setConnected(false); 
     if (mjpeghttp != null) { 
      mjpeghttp.cancel(); 
      //mjpeghttp.interrupt(); 
      //mjpeghttp = null; 

     } 
      } 

Répondre

0

Vous devez travailler avec l'écran uniquement de thread d'événement

//safely (recommended) 
Application.getApplication().invokeLater(new Runnable() { 
     public void run() { 
      //your code here 
     } 
}); 

ou

//fast 
synchronized(Application.getEventLock()) { 
    //your code here 
} 
+1

// votre code ici - est le code, qui montre le message – oxigen

+0

je ne peux pas comprendre ?? où devrais-je ces codes ?? – atasoyh

+0

Vous avez un code, qui fait quelque chose avec l'interface utilisateur. Ce code doit être synchronisé {} ou invokeLater {} Votre problème n'est pas dans httpConnection. Le problème est dans le travail avec l'affichage – oxigen

1

Il semble que votre HttpConnection est accessible à partir d'un fil arrière-plan (non IU) qui est bon. Cependant, votre interface utilisateur appelle close() directement, ce qui peut bloquer. Vous devriez envisager de générer un autre thread pour faire le close().

Questions connexes