Ваша readAndDispatch
петля обратная.Документация для Display#readAndDispatch()
гласит, что:
возвращает true
, если есть потенциально дополнительная работа, или false
, если вызывающая сторона может спать до другого событияпомещается в очередь событий.
Таким образом, ваш цикл на самом деле должен быть:
while(! shell.isDisposed())
{
if(! display.readAndDispatch())
{
display.sleep();
}
}
Мое понимание sleep()
заключалось в том, что должно бытьдовольно эффективно просыпаться, когда появляется новое событие для обслуживания, но это, конечно, не гарантия.