Безрассудный вопрос, но я действительно не могу заставить его работать: у меня есть какой-то длительный процесс в приложении Swing, который может занять несколько минут.Я хочу отобразить диалоговое окно прогресса для пользователя, пока этот процесс продолжается.Я также хочу запретить пользователю выполнять дальнейшие действия, например нажимать кнопку во время процесса.
Если я выполняю процесс в EDT, это, очевидно, не позволяет конечному пользователю делать что-либо, покапроцесс продолжаетсяНо так как EDT занят обработкой, он никогда не сможет воспроизвести содержимое диалога, поэтому я просто получаю схему диалога.
Но если я выполняю процесс в рабочем потоке, конечный пользователь можетнажимайте кнопки и заставляйте EDT манипулировать состоянием, которым одновременно манипулирует и работник, и, как следствие, bad stuff .Если я сделаю диалог модальным, этого не произойдет, но модальный в Swing также подразумевает блокирование , поэтому в тот момент, когда я вызываю setVisible(true)
, поток блокируется навсегда.
Итак, моё текущее «решение» - использовать рабочий поток, а затем порождать отдельный поток, единственная цель которого состоит в том, чтобы поглотить блокирующую природу setVisible
.Конечно, должно быть лучшее решение!
Итак, как мне получить диалоговое окно, которое не позволяет пользователю взаимодействовать с остальной частью системы (модальной), но не блокирует поток, который делает его видимым?