Как дождаться закрытия JFrame в swing?

В Java Swing есть несколько способов дождаться закрытия JFrame, в зависимости от требуемого функционала и сценария использования.

Один из наиболее распространенных способов - это использование слушателя события WindowListener. Этот интерфейс содержит несколько методов, один из которых - windowClosing(), вызываемый при закрытии окна. С помощью этого метода можно выполнить необходимые операции перед закрытием фрейма.

Вот пример кода, показывающий, как использовать WindowListener для дожидания закрытия JFrame:

import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Пример JFrame");
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                // Выполнение необходимых операций перед закрытием фрейма
                System.out.println("Окно закрывается...");
                // Дополнительный код

                // Закрытие фрейма
                frame.dispose();
            }
        });

        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

С помощью метода setDefaultCloseOperation() мы устанавливаем, что при закрытии фрейма необходимо выполнить действия, определенные в слушателе WindowListener.

Другой способ - это использование класса WindowAdapter, который является абстрактным классом, реализующим интерфейс WindowListener. При использовании WindowAdapter можно выбрать только необходимые методы для переопределения, вместо реализации всех методов интерфейса WindowListener.

import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Пример JFrame");
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("Окно закрывается...");
                // Дополнительный код
                frame.dispose();
            }
        });

        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

В обоих примерах выполняются необходимые действия в методе windowClosing(), например, вывод сообщения о закрытии фрейма и закрытие фрейма с помощью метода dispose(). Вы можете добавить свой код в этот метод, чтобы выполнить дополнительные операции перед закрытием фрейма.

Эти методы позволяют корректно обработать закрытие JFrame в Java Swing и выполнить любые необходимые действия перед закрытием окна.