Кажется, что ваши запросы к БД выполняются из потока пользовательского интерфейса, даже если вы говорите, что запланированное задание выполняет запросы (?).Чтобы быть уверенным, вы можете распечатать трассировку стека, где вы получаете доступ к базе данных:
new Exception().printStacktrace();
Перейдите к предложенному вами решению: это выглядит как приличный дизайн, если ваши запросы к БД медленны и в противном случае заморозили бы ваш интерфейс.Вы могли бы реализовать систему событий между вашим уровнем пользовательского интерфейса и уровнем базы данных, возможно, простой подход на основе очереди.
РЕДАКТИРОВАТЬ:
Есть наиболее вероятные примеры, чтобы найти, какреализовать решение, основанное на событиях.
Отказ от ответственности: я много лет не занимался программированием пользовательского интерфейса.
- Пользователь нажимает кнопку в пользовательском интерфейсе.Поток пользовательского интерфейса помещает объект события (DataWantedEvent) в очередь (java.util.Queue), изменяет метку («Ожидание данных ...»), а затем продолжается и ожидает других действий пользователя.
- Поток уровня БД принимает событие из очереди и запрашивает базу данных.Результат отправляется обратно в другую очередь в объекте результата.
- Поток пользовательского интерфейса (вероятно, не основного потока) берет объект результата из очереди результатов и обновляет пользовательский интерфейс.
Очередь для публикации объектов результатов в пользовательском интерфейсе может не потребоваться.Метод обновления может быть вызван напрямую.
Если пользователь нажимает кнопку отмены, событие / обратный вызов обновления можно игнорировать или, если возможно, запрос базы данных можно отменить.