Multithreading 未捕获异常:BlackBerry上的事件调度线程不允许执行阻止操作
我有一个HttpConnection线程类。当ı停止httpConnection时,我显示此消息。 ı应该如何停止httpConnection 黑莓输出控制台:Multithreading 未捕获异常:BlackBerry上的事件调度线程不允许执行阻止操作,multithreading,blackberry,java-me,thread-safety,Multithreading,Blackberry,Java Me,Thread Safety,我有一个HttpConnection线程类。当ı停止httpConnection时,我显示此消息。 ı应该如何停止httpConnection 黑莓输出控制台: RuntimeException blocking operation not permitted on event dispatch thread net_rim_cldc-10 EventThreadCheck throwException 0x3434 net_rim_cldc_io_tcp Protocol <p
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 void close() {
super.close();
StaticVar.ActiveCam.cancel();
// CameraListScreen screen = new CameraListScreen();
// UiApplication.getUiApplication().pushScreen(screen);
//
}
摄像机类的一部分/*ActiveCam的取消在这里/:
您必须仅从事件线程使用屏幕
//safely (recommended)
Application.getApplication().invokeLater(new Runnable() {
public void run() {
//your code here
}
});
或
看起来您的HttpConnection是从后台(非UI)线程访问的,这很好。但是,您的UI直接调用close(),这可能会阻塞。你应该考虑生成另一个线程来做关闭()。< /p>你有一个代码,这和UI有关。此代码必须在同步{}或调用器{}中。您的问题不在httpConnection中。问题与显示器有关,这些是问题的反面。这就是如何从非事件线程访问UI。
// finishes connection.
public void cancel() {
setConnected(false);
if (mjpeghttp != null) {
mjpeghttp.cancel();
//mjpeghttp.interrupt();
//mjpeghttp = null;
}
}
//safely (recommended)
Application.getApplication().invokeLater(new Runnable() {
public void run() {
//your code here
}
});
//fast
synchronized(Application.getEventLock()) {
//your code here
}