Como salvar as opções de aplicativo antes da saída?
-
23-09-2019 - |
Pergunta
Fiz um aplicativo e preciso salvar algumas opções antes de sair. (Algo como dimensão da janela, ..., que será escrito em um arquivo.)
O quadro principal definiu isso:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Como posso salvar opções que me interessam? (Antes de sair, é claro)
Obrigado!
Solução
Se você quiser apenas fazer algo quando o aplicativo estiver desligado, pode fazer o desligamento usando este código:
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
// Do what you want when the application is stopping
}
}));
No entanto, isso não permitirá que você não feche sua janela. Se você precisar verificar algo antes de sair, pode substituir o windowClosing
evento:
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// Do what you want when the window is closing.
}
});
Observe que a primeira solução - usando o gancho de desligamento - tem a vantagem de não estar relacionada a um evento de janela e será executada mesmo se o aplicativo for interrompido por outro evento (exceto, é claro, se o processo Java for morto brutalmente ).
Outras dicas
Pode ser o seguinte ajudará.
Primeiro você precisa ler seu arquivo de propriedade. Ver doc
Properties properties = new Properties(); try { properties.load(new FileInputStream("filename.properties")); } catch (IOException e) { System.err.println("Ooops!"); }
Segundo Adicionar manipulador de eventos à sua janela, que salvará seus dados no arquivo de propriedade.
addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { try { properties.store(new FileOutputStream("filename.properties"), null); } catch (IOException e) { } } });
Isso é tudo, se eu te entendi correto)
Você pode registrar um WindowListener e salve suas opções no método WindowClose.
E claro
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Não tenho certeza se isso se aplica à sua situação, mas pode a outras pessoas que surfam para este tópico. Meu aplicativo tem um loop principal () e no final tem o laço (! Shell.isdisised). Quando o aplicativo é executado, o loop está indo e quando o aplicativo está fechado, o loop termina e cai para o que quer que seja depois dele no método principal. É aqui que coloco uma verificação se o editor estiver sujo e se as preferências mudaram e lidar com elas para as condições. Meu método anexado ao arquivo fecha o shell e chama o método CloseCurrent (), mas se alguém clicar no ícone 'x' fechar a janela, ele cai aqui e verifico novamente se alguma coisa estiver suja e salve, se necessário.
while (!shlCpbtool.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
// exit
if(dirty){
closeCurrent();
}