Posted on 2006-02-22 09:10
fortune 閱讀(1005)
評論(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實例。不然會導致異常。)