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()
實際上處理這些調用?有沒有什麼辦法可以在這個線程上以乾淨的方式執行代碼(也就是說,沒有構建我自己的事件隊列)?
在主循環內部重新實現這個東西相對容易,但我覺得我在這裏錯過了一些非常明顯的東西。