Я согласен с другими, вызывая ваш код в главном потоке Swing, EDT или потоке рассылки событий, используя SwingUtilities.invokeLater
, который не имеет ничего общего с вашей проблемой, и фактически является хорошей привычкой входить в если есть риск, что, если вы не сделаете этого, ваш код может быть отозван из EDT. Другими словами, если вы показываете другое окно из кода, вызванного в ActionListener JButton, тогда нет необходимости использовать SwingUtilities.invokeLater
, так как метод actionPerformed будет вызываться в EDT.
Возвращаясь к вашей проблеме, я предлагаю вам сделать другое окно JDialog - либо модальным для приложения, либо нет, в зависимости от ваших потребностей - а не JFrame. Это позволяет вам держать диалог над основным JFrame и заставлять пользователя работать с вашим диалогом, прежде чем вернуться к основному графическому интерфейсу, и предотвращает закрытие приложения, если диалог закрывается.
И чтобы ответить на ваш вероятный следующий вопрос, да, JDialogs может содержать сложные графические интерфейсы, такие же сложные, как и любой JFrame.