我的java / jython应用程序运行'默认'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 :(得分:0)
想出来,display.asyncExec
就是这样。