Когда начинаются события asyncExec? - PullRequest
0 голосов
/ 01 мая 2009

Я пытаюсь создать голое приложение для использования при разработке плагина. Мне не нужен верстак.

Ниже будет отображаться диалоговое окно title1, но title2 никогда не появится.

Что нужно сделать, чтобы показать 2-й?

public class BareBonesApp extends AbstractApplication
{
    public Object start(IApplicationContext context) throws Exception
    {
        Display display = PlatformUI.createDisplay();

        MessageDialog.openWarning(null, "title1", "message1");

        display.asyncExec(new Runnable()
        {
            public void run()
            {
                MessageDialog.openWarning(null, "title2", "message2");
            }
        });

        return null;
    }
}

1 Ответ

3 голосов
/ 29 мая 2009

Дисплей имеет разные очереди для исполняемых файлов, которые должны запускать синхронизацию, асинхронность или в указанное время (Display.timerExec). Когда Display.readAndDispatch отправил все события, сначала выполняются исполняемые объекты в очереди синхронизации, затем очищается асинхронная очередь, и после этого выполняются соответствующие запускаемые таймеры timerExec.

Единственное различие между Display.syncExec и Display.asyncExec заключается в том, что метод syncExec ожидает выполнения runnable для потока Display. Display.asyncExec просто ставит очередь в очередь и продолжается.

Так что, если «title2» никогда не появляется, я полагаю, что ваше приложение не запускает цикл отображения:

Display display = new Display(); // this thread should be the only one that creates a display instance
while (someCondition) {
  if (!display.readAndDispatch())
    display.sleep();
}
...