Domanda

Esiste un modo per un programma Java di rilevare quando il sistema operativo sta per andare in modalità di sospensione o, in mancanza, rilevando almeno un risveglio?

Il vero problema è che in una particolare applicazione vengono eseguite in background diverse operazioni del database MySQL. Nei test su un computer Windows, queste transazioni di database vengono interrotte dopo un ciclo di sospensione / riattivazione che causa una tonnellata di condizioni di errore nel programma. Questi errori in genere sembrano simili a questo:

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

Se potessimo reagire a un evento 'presto dormiremo' potremmo tentare di mettere in pausa le operazioni in background prevenendo il problema. Meno idealmente se potessimo reagire a un evento "appena svegliato", potremmo almeno sopprimere i messaggi di errore.

È stato utile?

Soluzione

È possibile rilevare la sveglia confrontando periodicamente l'ora di sistema corrente con l'ora di sistema precedente.

Modifica: ecco un esempio che potrebbe aiutarti a rilevare quando la macchina andrà in sospensione: http://www.codeguru.com/cpp/wp/system /messagehandling/article.php/c6907

Altri suggerimenti

So che non è esattamente quello che stai cercando, ma forse la risposta giusta è provare a scrivere il codice con il presupposto che i tuoi socket non rimarranno necessariamente attivi. Esistono molti motivi per cui la connessione potrebbe bloccarsi, ad esempio perché il DB è stato rimosso per manutenzione o perché qualcuno è inciampato sul cavo Ethernet. Penso che avresti problemi simili con errori se qualcuno tirasse fuori il cavo di rete mentre l'app era in esecuzione, e queste non sono condizioni inaudite, quindi forse è un approccio migliore per provare a gestirle con grazia.

Potresti semplicemente JNI o ??JNA per intercettare gli eventi sleep / wakeup dal sistema operativo.

Da Windows Power Events (MSDN) , dovresti creare un gestore Window e una finestra null per ricevere gli eventi WM_POWERBROADCAST. Questa procedura di finestra potrebbe quindi chiamare una funzione di evento nel codice Java per creare il messaggio in bolla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top