Мне нужно выполнить метод (метод, который создает файл), когда я выхожу из своей программы, как бы это сделать?
Запуск метода при закрытии программы?
Ответ 1
Добавить крюк остановки. Смотрите 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"));
}
Ответ 2
Поскольку вы используете 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
Внедрить WindowListener (или расширить WindowAdapter), используйте windowClosing (если ошибки в процессе должны помешать закрытию окна или что-то еще например) или windowClosed.
Вот ссылка на официальный учебник Sun (Erm... Oracle), в котором рассказывается, как создать WindowListener и добавить его в JFrame: http://download.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
Ответ 4
Вы также можете добавить окно приложения close close-для вашего приложения.
Ответ 5
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);
Не тестировали, но это должно вас заставить. Кроме того, вам не нужно использовать конструктор по умолчанию, если вы хотите передать некоторые параметры этому потоку.
Ответ 6
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();
}
}
});