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
循环 运行。在无头模式下,情况并非如此,所以这根本行不通。
我运行在无头模式下运行我的应用程序,为了执行某些操作,我需要在指定时间之间显示一个对话框。
代码示例
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
循环 运行。在无头模式下,情况并非如此,所以这根本行不通。