Display.getDefault.syncExec() 在无头模式下不正确 运行

Display.getDefault.syncExec() not running correctly in headless mode

我运行在无头模式下运行我的应用程序,为了执行某些操作,我需要在指定时间之间显示一个对话框。

代码示例

Display.getDefault().syncExec(new Runnable() {
@Override
    public void run() {
       //Jface Dialog code
       RuntimePauseDialog dlg = new RuntimePauseDialog();
       dialogResult = dlg.open();
    }
});

以上代码会被多次调用,第一次出现Dialog。从第二次开始,对话框不再出现。此外 运行() 根本不会执行并冻结。在 syncExec() 内部有一个 Runnable 锁,它被初始化并调用 wait(),它永远等待(应用程序冻结) 我认为这与线程有关。

注意: 当从 UI 模式 运行 时,相同的代码会正确显示对话框(多次)。问题仅在无头模式下。

尝试了 Whosebug 的建议,但由于我 运行 处于无头模式,因此不会创建 Workbench 并且无法使用它。

syncExec(和 asyncExec)依赖于在 UI 线程中有一个主 Display.readAndDispatch 循环 运行。在无头模式下,情况并非如此,所以这根本行不通。