使用Dispatch和SWT的主循环

时间:2011-11-12 01:19:13

标签: java macos jython

我的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()不应该实际处理这些来电吗?有没有什么方法可以干净的方式在这个线程上执行代码(也就是说,没有构建我自己的事件队列)?

在主循环中重新实现这些东西会相对容易,但我觉得我在这里缺少一些非常明显的东西。

1 个答案:

答案 0 :(得分:0)

想出来,display.asyncExec就是这样。