Como posso detectar em um aplicativo Swing que o PC está sendo desligado?
-
09-06-2019 - |
Pergunta
Programas Windows bem comportados precisam permitir que os usuários salvem seu trabalho quando desligam o PC.
Como posso fazer meu aplicativo detectar o evento de desligamento?Qualquer solução deve permitir ao usuário abortar o desligamento se o usuário selecionar, diga "Cancelar".
O gancho normal de fechamento da janela Swing não funciona, nem a adição de um gancho de desligamento.
Nos testes, os métodos de WindowListener (windowClosing, windowClosed, etc) não são chamados.
A resposta que aceitei requer o uso de código específico da plataforma (JNI para registro em WM_QUERYENDSESSION ).Isso não é um bug no Swing?
Ver http://forums.sun.com/thread.jspa?threadID=481807&messageID=2246870
Solução
Escreva algum código JNI na mensagem WM_QUERYENDSESSION.Você pode obter detalhes sobre isso na documentação do MSDN ou pesquisando no Google.
Se você não quiser escrever muito código C++ para fazer isso, posso recomendar a biblioteca JNA Clique aqui.O que fornece algumas boas abstrações Java para código C.
Outras dicas
como faço para que meu aplicativo Java desligue perfeitamente no Windows
Isso pode ser de ajuda
O acima parece ser a melhor resposta.
Não consigo encontrar nenhuma boa informação sobre a detecção de eventos de desligamento de janelas.Acho que o melhor método possível seria detectar o clima que seu aplicativo está tentando fechar, usando um evento de fechamento de janela ou algo semelhante e, em seguida, fazer a pergunta.
Procure manipulação de sinal em java.quando o Windows fechar, ele enviará um sinal ao aplicativo solicitando que ele encerre, provavelmente um sigterm
ver aqui para saber mais sobre isso (não sou o proprietário do site)