Pergunta

Existe uma maneira de um programa Java detectar quando o sistema operacional está prestes a dormir ou não, pelo menos detectando um acordar?

O problema real é que, em um aplicativo específico, várias operações de banco de dados MySQL são executadas em segundo plano. Ao testar em uma máquina Windows, essas transações de banco de dados são interrompidas após um ciclo de sono/despertar, causando uma tonelada de condições de erro no programa. Esses erros geralmente se parecem com o seguinte:

java.net.SocketException
MESSAGE: Software caused connection abort: recv failed

Se pudéssemos reagir a um evento de 'sono em breve', poderíamos tentar pausar as operações em segundo plano, preenchendo o problema. Menos idealmente, se pudéssemos reagir a um evento 'Just Worn Up', poderíamos pelo menos suprimir as mensagens de erro.

Foi útil?

Solução

Você pode detectar o despertar comparando periodicamente o tempo atual do sistema com o tempo anterior do sistema.

EDIT: Aqui está um exemplo que parece ajudar você a detectar quando a máquina vai dormir:http://www.codeguru.com/cpp/wp/system/messagehandling/article.php/c6907

Outras dicas

Sei que não é exatamente o que você está procurando, mas talvez a resposta certa seja tentar escrever o código com a suposição de que seus soquetes não permanecerão necessariamente. Há muitas razões pelas quais a conexão pode travar, por exemplo, porque o banco de dados é retirado para manutenção ou porque alguém tropeçou no seu cabo Ethernet. Eu acho que você teria problemas semelhantes com erros se alguém puxasse o cabo de rede enquanto seu aplicativo estava em execução, e estes não são condições inéditas, então talvez seja uma abordagem melhor tentar lidar com essas condições graciosamente.

Você poderia apenas JNI ou JNA para prender os eventos de sono/despertar do sistema operacional.

A partir de Windows Power Events (MSDN), você precisaria criar um manipulador de janelas e uma janela nula para receber os eventos WM_PowerBroadcast. Esse procedimento de janela pode então chamar uma função de evento no seu código Java para borbulhar a mensagem para cima.

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