Согласно http://www.javaworld.com/javaworld/jw-08-2007/jw-08-swingthreading.html?page=5 все операции с графическим интерфейсом должны выполняться в потоке диспетчеризации событий.
Хотя я понимаю причины, по которым Swing был разработан с учетом однопоточной модели, я не могу понять, как решить следующую проблему:
Давайте предложим метод с именем buildGui()
, который инициализирует основной графический интерфейс приложения. Для вызова метода buildGui()
требуется 10 секунд.
Давайте возьмем другой метод с именем splashScreen()
, который показывает JDialog
с неопределенным JProgressBar
внутри. Цель JDialog
очевидна: пользователь получает обратную связь о том, что приложение загружает ресурсы, инициализирует компоненты и т. Д.
Теперь, если моя программа вызывает:
splashScreen(); // build and show splash screen in EDT
buildGui(); // build main GUI in EDT
Заставка останавливается на 10 секунд, потому что она ждет, пока buildGui()
не завершится.
Есть ли у вас идеи как показать заставку, которая отображает состояние инициализации графического интерфейса (buildGui()
) при использовании однопоточной модели Swing?