Como faço para que meu aplicativo Java seja encerrado corretamente no Windows?

StackOverflow https://stackoverflow.com/questions/61692

  •  09-06-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo Java que desejo desligar 'bem' quando o usuário seleciona Iniciar-> Desligar.Tentei usar ouvintes de desligamento da JVM via Runtime.addShutdownHook(...) mas isso não funciona porque não consigo usar nenhum elemento de UI dele.

Também tentei usar o manipulador de saída na janela principal da interface do usuário do aplicativo, mas não há como pausar ou interromper o desligamento, pelo que sei.Como posso lidar bem com o desligamento?

Foi útil?

Solução

A abordagem JNI mencionada anteriormente provavelmente funcionará.

Você pode usar o JNA, que é basicamente um wrapper do JNI para torná-lo mais fácil de usar.Um bônus adicional é que (pelo menos na minha opinião) geralmente é mais rápido e mais fácil de manter do que o JNI bruto.Você pode encontrar JNA em https://jna.dev.java.net/

Se você está apenas iniciando o aplicativo no menu Iniciar porque está tentando fazer com que ele se comporte como um serviço no Windows, você pode usar o wrapper de serviço java que é encontrado aqui:http://wrapper.tanukisoftware.org/doc/english/download.jsp

Outras dicas

Pelo que eu sei, você precisa começar a usar JNI para configurar um manipulador de mensagens para o Windows. WM_QUERYENDSESSION mensagem.

Para fazer isto (se você for novo na programação do Windows como eu) você precisará criar uma nova classe de janela com uma nova função de tratamento de mensagens (como descrito aqui) e manipular o WM_QUERYENDSESSION do manipulador de mensagens.

Observação:Você precisará usar JNIEnv::GetJavaVM(...) e, em seguida, JavaVM::AttachCurrentThread(...) no encadeamento de manipulação de mensagens antes de poder chamar qualquer método Java a partir de seu código nativo de manipulação de mensagens.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top