Posted on 2006-02-22 09:10
fortune 阅读(999)
评论(0) 编辑 收藏 所属分类:
我的学习笔记
在SWT中,通常存在一个被称为"用户线程"的唯一线程,只有在这个线程中才能调用对构件或某些图形API的访问操作。如果在非用户线程中程序直接调用这些访问操作,那么SWTExcepiton异常会被抛出(if (display.thread != Thread.currentThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);)每一个在非用户线程中出现的widget都要通过检验看display.thread 是否等于Thread.currentThread()如果不相等就要抛出非法访问线程异常。但是SWT也在*.widget.Display类中提供了两个方法可以间接的在非用户线程的进行图形构件的访问操作,这是通过的syncExec(Runnable)和asyncExec(Runnable)这两个方法去实现的。
对于Display,在同一个线程里,不能申明2个Display实例。同样的,一个Display实例也不能跨线程使用。也就是说,如果你要在另外一个线程中显示一个窗体,(比如你要在任务完成后弹出一个对话框),你必须另外创建一个Display实例。不然会导致异常。)