Запуск метода при закрытии программы? - PullRequest
11 голосов
/ 28 апреля 2011

Мне нужно выполнить метод (метод, который создает файл), когда я выйду из своей программы, как мне это сделать?

Ответы [ 6 ]

29 голосов
/ 28 апреля 2011

Добавить отключающий крюк. Смотрите это Javadoc .

Пример:

public static void main(String[] args) {
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
        public void run() {
            System.out.println("In shutdown hook");
        }
    }, "Shutdown-thread"));
}
7 голосов
/ 28 апреля 2011

Так как вы используете Swing.Когда вы закрываете свое приложение (нажимая кнопку закрытия), вы можете просто скрыть свой фрейм.Запустите нужный метод, который создает файл, а затем выйдите из фрейма.Это приведет к изящному выходу.Если будут какие-либо ошибки / исключения, вы можете записать это в отдельный файл.

Вот код

package test;

import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JFrame;

public class TestFrame extends JFrame{

    public TestFrame thisFrame;

    public TestFrame(){
        this.setSize(400, 400);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    }

    public static void main(String[] args){
        TestFrame test = new TestFrame();
        test.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentHidden(ComponentEvent e) {
                System.out.println("Replace sysout with your method call");
                ((JFrame)(e.getComponent())).dispose();
            }
        });
    }

}

Пожалуйста, помните об использовании перехватчиков завершения работы.Как указано в Javadoc , в нем говорится, что

Когда виртуальная машина завершает работу из-за выхода пользователя из системы или завершения работы системы, базовая операционная система может разрешить только фиксированное количество временичтобы закрыть и выйти.Поэтому нежелательно пытаться взаимодействовать с пользователем или выполнять длительные вычисления в ловушке завершения работы

3 голосов
/ 28 апреля 2011

Реализация WindowListener (или расширение WindowAdapter), используйте windowClosing (если ошибки в процессе должны препятствовать закрытию окна или что-то подобное) или windowClosed метод.

Вот ссылка на официальный учебник Sun (Erm ... Oracle), в котором рассказывается, как создать WindowListener и добавить его в свой JFrame: http://download.oracle.com/javase/tutorial/uiswing/events/windowlistener.html

0 голосов
/ 05 мая 2017

addWindowListener - лучшее решение:

frame.addWindowListener(new WindowAdapter()
{
    public void windowClosing(WindowEvent we)
    {
      // run methods before closing  

try {

                                Runtime.getRuntime().exec("taskkill /f /im java.exe");

                            } catch (IOException e4) {
                                // TODO Auto-generated catch block
                                e4.printStackTrace();
                            }

    }
});
0 голосов
/ 28 апреля 2011
class ExitThread extends Thread {

         public void run() {
             // code to perform on exit goes here
         }
     }

//in main or wherever, beginning of execution
ExitThread t = new ExitThread();
//don't call t.start(), the hook will do it on exit
addShutdownHook(t);

Не проверял, но это должно помочь вам. Кроме того, вам не нужно использовать конструктор по умолчанию, если вы хотите передать некоторые параметры этому потоку.

0 голосов
/ 28 апреля 2011

Вы также можете добавить окно для близкого слушателя к вашему приложению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...