Как запустить два компонента в потоке диспетчеризации событий одновременно? - PullRequest
1 голос
/ 03 мая 2011

У меня есть JButton, который, когда я щелкаю по нему, загружает некоторые данные из базы данных + инициализирует JDialog, который имеет много элементов управления + заполняет эти элементы управления загруженными данными, а затем показывает медленный JDialog. Для окончательного отображения JDialog требуется от 3 до 5 секунд, что приводит к неправильному зависанию программы.

Я создал небольшой JDialog с JXBusyLabel из SwingX, чтобы показать занятую метку при загрузке и инициализации таких медленных процессов. Но как я могу запустить этот занятый ярлык JDialog в EDT при инициализации медленного диалога?

Примечание: загрузка данных из базы данных не медленная, но инициализация тяжелого JDialog и его компонентов вызывает медленную обработку.

Ответы [ 2 ]

5 голосов
/ 03 мая 2011
  1. Показать диалоговое окно занятости.

  2. Запустить SwingWorker и выполнить все длительные задачи в фоновом режиме (база данных)

  3. Когда закончите, создайте большой диалог с данными из базы данных (внутри SwingWorker.done (метод))

  4. Скрыть диалог занятости, покажите большой диалог.

0 голосов
/ 03 мая 2011

Вам лучше использовать SwingWorker:

  1. создать диалог с меткой занятости, создать рабочий свинга
  2. Запустить Swingworker (он будет асинхронно загружать данные из БД, подготовить управление для главного диалога)
  3. в методе done () SwingWorker, скройте свой первый маленький диалог и покажите основной
...