Swing не является поточно-ориентированным, тогда идея построить Swing GUI внутри блока try - catch - finally
более чем контрпродуктивна, вам нужно готовить все безопасные для кода блоки отдельно
1) Я начинаю с очень плохого пути -> ваша идея должна быть заключена в invokeLater()
, если есть трудная и долгая работа Stream, File I/O, DB Conenction
, тогда попытайтесь обернуть это в invokAndWait()
но вы загружаете эти данные из какого-либо существующего графического интерфейса, у вас есть много времени для
2) подготовить и загрузить данные (Stream, File I/O, DB Conenction
) до того, как они вам понадобятся, затем поместить эти объекты в графический интерфейс, когда вам нужно (would be wrapped into invokeLater
)
3) создайте GUI (would be wrapped into invokeLater
), покажите это Container
, затем загрузите данные (Stream, File I/O, DB Conenction
), если успешно, затем добавьте показ этих данных в GUI
3) создать графический интерфейс (would be wrapped into invokeLater
), показать это Container
, загрузить данные только для одного из JComponents
, если с успехом, то показать это JComponent
, то же самое для 2-го. и так далее ...
для всех трех опций требуется перенаправление (Stream, File I/O, DB Conenction
) загрузки этих данных, значение для JComponent(s)
, в Background Task(s)
, у вас есть два правильных способа сделать это,
с помощью
Runnable#Thread
SwingWorker