2010-11-25 6 views
0

私はHttpConnectionスレッドクラスを持っています。 ıがhttpConnectionを停止すると、私はこのメッセージを表示します。 どのようにhttpConnectionを停止する必要がありますか?未知の例外:BlackBerryのイベントディスパッチスレッドでブロック操作が許可されていません

ブラックベリー出力コンソール:私のConnectionクラスの

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 

パーツ:

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

私の画面クラスの一部:

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

とCameraクラスの一部/ * ActiveCamさんキャンセルはこちら /:

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

     } 
      } 

答えて

0

あなたのHttpConnectionが良いです、バックグラウンド(非UI)スレッドからアクセスされたように見えますのみイベントスレッド

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

または

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

//あなたのコードはここにあります - コードでメッセージを表示します – oxigen

+0

私は理解できませんか?私はこれらのコードはどこですか? – atasoyh

+0

あなたはコードを持っていますが、それはUIで何もしません。このコードはsynchronized {}またはinvokeLater {}になければなりません。問題はhttpConnectionにありません。ディスプレイに問題があります – oxigen

1

から画面で作業しなければなりません。しかし、あなたのUIはclose()を直接呼び出してブロックすることがあります。 close()を実行する別のスレッドを生成することを検討する必要があります。