2009-05-01 7 views
0

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

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

Что необходимо сделать для отображения второго?

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; 
    } 
} 

ответ

3

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^