Заставка, показывающая прогресс построения GUI в потоке диспетчеризации событий - PullRequest
0 голосов
/ 12 марта 2012

Согласно 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?

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

Используйте AWT для заставок, чтобы их можно было загрузить до загрузки пакета Swing. Собственный плагин SplashScreen - это чистый AWT. Смотрите также этот вопрос повторно. использование SplashScreen & EDT .

Хотя я обычно говорю «в этом тысячелетии, используйте компоненты Swing», имеет смысл использовать AWT для всплеска.

1 голос
/ 12 марта 2012

Взгляните на учебник Swing о заставках , который содержит пример кода, выполняющий именно то, что вам нужно

...