О переопределении метода run() GUI в методе main

Проблема в том, что когда я закрываю окна GUI, я хочу запустить последний метод (например, printList()), но мне не удается это сделать. Это мой основной метод

public static void main(String args[]) {

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            try {
                patientTest2 screen = new patientTest2();
                screen.setVisible(true);
                screen.setResizable(false);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(patientTest2.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    });

PatientTest2 - мой класс JFrame. Я предполагаю, что если я поставлю printList() до } catch (FileNotFoundException ex) { это должно работать и, наконец, распечатать мой список в файл, но это не так. Я буду рад, если вы сможете мне помочь и объяснить, почему, конечно же,?

3 ответа

Решение

Вы должны добавить слушателя, который расширяет WindowAdapter в свой кадр и переопределить метод windowClosing(WindowEvent e), В этом методе вы сможете вызывать любые методы, которые хотите вызвать, до закрытия окна.

Вам нужно

  • изменить операцию закрытия по умолчанию на JFrame.DO_NOTHING_ON_CLOSE (если окно является JFrame)
  • добавьте WindowListener в ваше окно верхнего уровня
  • слушайте события закрытия окна, вызывая ваш метод
  • и, наконец, выйдите из JVM с соответствующим кодом выхода (обычно 0, если ошибок нет).

Если вы хотите, чтобы что-то работало, когда ваша Java VM была закрыта, то вам стоит взглянуть на

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {

        @Override
        public void run() {
            //The stuff you want to do at shutdown.
        }
    }));

Пожалуйста, прочитайте здесь для получения дополнительной информации.

Вы также должны установить DefaultCloseOperation вашего Окна, если вы хотите закрыть свою Программу (и завершить работу своей Java VM), когда JFrame закрыт.

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Это я думаю то что ты просил. Надеюсь это поможет.

Другие вопросы по тегам