Display.asyncExec против Display.timerExec - PullRequest
4 голосов
/ 08 марта 2012

Я надеялся, что Display.timerExec(int,Runnable) будет почти таким же, как Display.asyncExec(Runnable), но с указанной задержкой.Однако кажется, что Display.timerExec может только быть выполненным в потоке GUI, поскольку его 1-я строка является вызовом checkDevice().Это вызывает исключение, если вы не работаете в потоке GUI.

Может кто-нибудь предложить способ использования Display.asyncExec(), но с задержкой, предшествующей выполнению?

1 Ответ

6 голосов
/ 08 марта 2012

Вы можете сначала переключиться на поток GUI с помощью asyncExec, а затем запланировать действие таймера с помощью timerExec.Эти два метода похожи в том, что они оба выполняют некоторое действие, но asyncExec только переключает поток, timeExec только планирует действие для потока GUI.

display.asyncExec(() -> display.timerExec(100, () -> doThings()));

При этом используются лямбда-выражения, которые были введеныв Java 8.

В Java 7 или более ранних версиях его нужно писать анонимными классами, например:

display.asyncExec(new Runnable() {
    public void run() {
        display.timerExec(100, new Runnable() {
            public void run() {
                doThings();
            }
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...