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!

Foi útil?

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á.

  1. 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!");
    }
    
  2. 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();
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top