Причина в том, что ваше приложение блокирует пользовательский интерфейс. Как говорили другие авторы, оконный менеджер может заметить, что вы некоторое время не обрабатывали события, и вывести этот пользовательский интерфейс.
Скорее всего, вы выполняете некоторые операции ввода-вывода (например, чтение или запись на диск или сетевые запросы) синхронно в потоке пользовательского интерфейса (по умолчанию). Хорошее эмпирическое правило, позволяющее поддерживать адаптивность вашего приложения (и, следовательно, избегать пляжного мяча), - никогда не выполнять синхронный ввод-вывод в потоке пользовательского интерфейса. Вы можете либо использовать асинхронный ввод-вывод (API, которые принимают обратный вызов, выполняют работу в фоновом потоке, а затем уведомляют вас в потоке пользовательского интерфейса, когда они это сделали), либо вы можете использовать отдельный фоновый поток для выполнения работы.
Если вы не выполняете ввод-вывод, то вы, вероятно, находитесь в каком-то длинном цикле в потоке пользовательского интерфейса, из-за которого вы не отвечаете. В этом случае либо оптимизируйте, либо удалите цикл, либо переместите его в фоновый поток.