Pregunta

Estoy intentando crear una aplicación simple para usar en el desarrollo de un complemento. No necesito una mesa de trabajo.

Debajo del cuadro de diálogo título1 se mostrará, pero el título2 nunca lo hace.

¿Qué se debe hacer para que se muestre el segundo?

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;
    }
}
¿Fue útil?

Solución

La pantalla tiene diferentes colas para ejecutables que deberían ejecutarse en sincronización, asíncrona o en un tiempo específico (Display.timerExec). Cuando Display.readAndDispatch ha enviado todos los eventos, primero se ejecutan los ejecutables en la cola de sincronización, luego se vacía la cola asíncrona y luego se ejecutan los ejecutables de timerExec.

La única diferencia entre Display.syncExec y Display.asyncExec es que el método syncExec espera a que el subproceso de pantalla ejecute el ejecutable. Display.asyncExec simplemente pone en cola el ejecutable y continúa.

Entonces si " title2 " nunca aparece, supongo que su aplicación no ejecuta el bucle de visualización:

Display display = new Display(); // this thread should be the only one that creates a display instance
while (someCondition) {
  if (!display.readAndDispatch())
    display.sleep();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top