Question

Existe-t-il un moyen pour un programme Java de détecter quand le système d'exploitation est sur le point de s'endormir ou s'il échoue au moins, en détectant au moins un réveil?

Le problème actuel est que, dans une application particulière, plusieurs opérations de base de données MySQL sont exécutées en arrière-plan. Lors des tests sur une machine Windows, ces transactions de base de données sont interrompues après un cycle veille / réveil, ce qui entraîne une tonne de conditions d'erreur dans le programme. Ces erreurs ressemblent généralement à ceci:

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

Si nous pouvions réagir à un événement 'nous nous arrêterons bientôt', nous pourrions tenter de suspendre les opérations en arrière-plan afin d'éviter le problème. Moins idéalement, si nous pouvions réagir à un événement qui vient de se produire, nous pourrions au moins supprimer les messages d’erreur.

Était-ce utile?

La solution

Vous pouvez détecter le réveil en comparant périodiquement l'heure système actuelle et l'heure système précédente.

Modifier: voici un exemple qui pourrait vous aider à détecter le moment où la machine se met en veille: http://www.codeguru.com/cpp/wp/system /messagehandling/article.php/c6907

Autres conseils

Je sais que ce n'est pas exactement ce que vous recherchez, mais la bonne réponse est peut-être d'essayer d'écrire le code en supposant que vos sockets ne resteront pas forcément ouverts. La connexion peut échouer pour de nombreuses raisons, par exemple si la base de données est supprimée pour maintenance ou si quelqu'un a trébuché sur votre câble Ethernet. Je pense que vous auriez des problèmes d'erreurs similaires si quelqu'un retirait le câble réseau pendant que votre application était en cours d'exécution. Ces conditions ne sont pas sans précédent. C'est peut-être une meilleure approche pour essayer de gérer ces conditions avec élégance.

Vous pouvez simplement JNI ou JNA capturer les événements veille / réveil du système d'exploitation.

De Événements d'alimentation Windows (MSDN) , vous devez créer un gestionnaire de fenêtre et une fenêtre null pour recevoir les événements WM_POWERBROADCAST. Cette procédure de fenêtre peut ensuite appeler une fonction d’événement dans votre code Java pour masquer le message.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top