2011-11-12 23 views
1

我的Java/Jython的應用程序運行這樣的「默認」 SWT主循環:使用調度與SWT的主循環

while not shell.isDisposed(): 
    if not display.readAndDispatch(): 
     display.sleep() 

在Mac OS X,所有SWT相關的代碼需要在主線程中運行,如下:

from com.apple.concurrent import Dispatch 

call = Dispatch.getInstance().getNonBlockingMainQueueExecutor().execute 

class Main(Runnable): 
    def run(self): 
     # main loop here 

call(Main()) 

到目前爲止,這工作正常。現在到問題部分:我需要在某個時間點執行Main.run方法之外的SWT相關代碼。

當我在主循環運行時使用相同的call()魔法時,由於線程繁忙(異步調用如上所示立即返回,但從不執行任何代碼,永遠同步調用塊),因此沒有任何反應。

不應該display.readAndDispatch()實際上處理這些調用?有沒有什麼辦法可以在這個線程上以乾淨的方式執行代碼(也就是說,沒有構建我自己的事件隊列)?

在主循環內部重新實現這個東西相對容易,但我覺得我在這裏錯過了一些非常明顯的東西。

回答

0

想通了,display.asyncExec就是這樣。