Frage

Ich versuche, bei der Entwicklung eines Plugins mit einem nackten Knochen App für den Einsatz zu schaffen. Ich habe nicht eine Werkbank benötigen.

Unter dem title1 Dialog zeigt, aber die title2 nie.

Was für die zweite ein, um getan werden muss gezeigt werden?

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;
    }
}
War es hilfreich?

Lösung

Display hat verschiedene Warteschlangen für Runnables des sync, async oder in einer specifc Zeit (Display.timerExec) ausgeführt werden soll. Wenn Display.readAndDispatch alle Ereignisse ausgelöst hat, zuerst die Runnables in der sync-Warteschlange ausgeführt werden, dann wird die Async-Warteschlange geleert und danach die aufgrund timerExec Runnables ausgeführt werden.

Der einzige Unterschied zwischen Display.syncExec und Display.asyncExec ist, dass die syncExec Verfahren wartet, bis der runnable durch die Anzeige Thread ausgeführt werden. Display.asyncExec einfach Warteschlangen die runnable und geht weiter.

Also, wenn „title2“ nie angezeigt wird, ich gehe davon aus Ihrer Anwendung ist die Anzeige Schleife nicht ausgeführt:

Display display = new Display(); // this thread should be the only one that creates a display instance
while (someCondition) {
  if (!display.readAndDispatch())
    display.sleep();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top