Если у вас есть только 2 окна, между которыми вы хотите переключиться, может быть проще всего использовать JFrame.setVisible () для переключения между ними.
frame1.setVisible(false); //hides it temporarily
frame2.setVisible(true); //shows it
Это на самом деле не закрывает frame1- он просто скрывает его и отображает кадр 2.
Если вы пишете программу со многими потенциальными окнами и хотите на самом деле «уничтожить» окно (освобождая при этом лишнюю память, которую он занимает)вам нужно вызвать JFrame.dispose ();
frame1.dispose(); //closes the window--cannot be recovered
frame2.setVisible(true); //shows it