Pregunta

¿Hay alguna forma de que un programa Java detecte cuándo el sistema operativo está a punto de irse a dormir o si falla, al menos detectando un despertar?

El problema real es que en una aplicación particular se ejecutan varias operaciones de base de datos MySQL en segundo plano. Al realizar pruebas en una máquina con Windows, estas transacciones de la base de datos se interrumpen después de un ciclo de suspensión / activación, lo que provoca un montón de condiciones de error en el programa. Estos errores generalmente se parecen a esto:

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

Si pudiéramos reaccionar ante un evento de 'dormirá pronto' podríamos intentar pausar las operaciones en segundo plano para evitar el problema. De manera menos ideal, si pudiéramos reaccionar ante un evento de "recién despertado", al menos podríamos suprimir los mensajes de error.

¿Fue útil?

Solución

Puede detectar la activación comparando periódicamente la hora actual del sistema con la hora anterior del sistema.

Editar: aquí hay un ejemplo que parece que lo ayudaría a detectar cuándo la máquina se va a dormir: http://www.codeguru.com/cpp/wp/system /messagehandling/article.php/c6907

Otros consejos

Sé que no es exactamente lo que estás buscando, pero tal vez la respuesta correcta es intentar escribir el código con la suposición de que tus sockets no necesariamente se mantendrán activos. Hay muchas razones por las cuales la conexión podría fallar, por ejemplo, porque la base de datos se desconecta por mantenimiento, o porque alguien tropezó con su cable Ethernet. Creo que tendría problemas similares con los errores si alguien desconectara el cable de red mientras su aplicación se estaba ejecutando, y estas no son condiciones inauditas, por lo que tal vez sea un mejor enfoque para tratar de manejar esas condiciones con gracia.

Podría simplemente JNI o ??JNA para atrapar los eventos de suspensión / activación del sistema operativo.

De Windows Power Events (MSDN) , tendría que crear un controlador de Windows y una ventana nula para recibir los eventos WM_POWERBROADCAST. Este procedimiento de ventana podría llamar a una función de evento en su código Java para burbujear el mensaje.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top