Неблокирующее модальное диалоговое окно хода выполнения Swing

Дурацкий вопрос, но я действительно не могу заставить его работать: у меня есть какой-то длительный процесс в приложении Swing, который может занять несколько минут. Я хочу отображать для пользователя диалоговое окно прогресса, пока этот процесс продолжается. Я также хочу запретить пользователю выполнять дальнейшие действия, например, нажатие кнопки во время выполнения процесса.

Если я выполняю процесс на EDT, это, очевидно, не позволяет конечному пользователю что-либо делать во время выполнения процесса. Но поскольку EDT занят обработкой, он никогда не дойдет до рендеринга содержимого диалога, поэтому я просто получаю схему диалога.

Но если я выполняю процесс в рабочем потоке, конечный пользователь может нажимать кнопки и заставляют EDT манипулировать состоянием, которым одновременно управляет работник, что, как следствие, приводит к плохим вещам . Если я сделаю диалоговое окно модальным, этого не произойдет, но модальный в Swing также подразумевает блокировку , поэтому в момент, когда я вызываю setVisible (true) , поток блокирует навсегда.

Итак, мое текущее "решение" - использовать рабочий поток, а затем порождать отдельный поток, единственная цель которого - поглотить блокирующий характер setVisible . Конечно, должно быть лучшее решение!

Итак, как мне получить диалоговое окно, которое не позволяет пользователю взаимодействовать с остальной частью системы (модально), но не блокирует поток, который делает его видимым?

16
задан Zarkonnen 7 October 2010 в 22:16
поделиться