Используйте класс монитора с глобальным экземпляром, который постоянно обновляется в вашем коде (я начинаю, работаю, у меня ххх%, все готово).
Затем монитор может принять решение показать диалоговое окно и сохранить его текущим. Позже, например, вы можете просто заменить диалог на индикатор выполнения в строке состояния. Используйте интерфейс для монитора (методы: start (), update (), end (), error (), isAborted ()), чтобы вы могли заменить его на что-то еще.
Вы можете расширить монитор, чтобы ждать 500 мс после запуска (), если есть конец (), и не показывать диалоговое окно в этом случае и т. Д.
Вот как Eclipse делает это и работает хорошо.