2010-11-25 2 views
0

Ich habe eine HttpConnection-Thread-Klasse. Wenn ich httpConnection stoppe, zeige ich diese Nachricht an. Wie sollte ich httpConnection stoppen?Uncaught Ausnahme: Blockierung Operation nicht zulässig Ereignis Ereignis Thread auf BlackBerry

Blackberry Ausgabekonsole:

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 

Teile Meine Verbindungsklasse:

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; 
    } 

Teil meines Bildschirms Klasse:

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

und ein Teil der Kamera Klasse/* ActiveCAM des Abbrechen ist hier /:

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

     } 
      } 

Antwort

0

Sie müssen nur von Ereignis-Thread

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

oder

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

// Ihr Code hier - Ist Code, der Nachricht zeigt – oxigen

+0

kann ich nicht verstehen ?? Wo soll ich diese Codes ?? – atasoyh

+0

Sie haben einen Code, der etwas mit UI macht. Dieser Code muss synchron sein {} oder invokeLater {} Ihr Problem ist nicht in httpConnection. Problem ist in Arbeit mit Anzeige – oxigen

1

Es sieht aus wie Ihre Httpconnection aus dem Hintergrund (nicht UI) Thread zugegriffen wird, was gut ist. Ihre Benutzeroberfläche ruft jedoch close() direkt auf, was blockieren kann. Sie sollten erwägen, einen anderen Thread zu erzeugen, um den close() zu tun.

Verwandte Themen