Frage

Gibt es eine Möglichkeit für ein Java-Programm, zu erkennen, wann das Betriebssystem in den Ruhezustand wechselt, oder, falls dies nicht gelingt, zumindest ein Aufwachen zu erkennen?

Das eigentliche Problem besteht darin, dass in einer bestimmten Anwendung eine Reihe von MySQL-Datenbankoperationen im Hintergrund ausgeführt werden.Beim Testen auf einem Windows-Rechner werden diese Datenbanktransaktionen nach einem Schlaf-/Wachzyklus unterbrochen, was zu einer Vielzahl von Fehlerbedingungen im Programm führt.Diese Fehler sehen normalerweise etwa so aus:

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

Wenn wir auf ein „Wird bald schlafen gehen“-Ereignis reagieren könnten, könnten wir versuchen, Hintergrundvorgänge anzuhalten, um dem Problem vorzubeugen.Weniger ideal wäre es, wenn wir auf ein „Gerade aufgewacht“-Ereignis reagieren könnten, wir könnten zumindest die Fehlermeldungen unterdrücken.

War es hilfreich?

Lösung

Sie können das Aufwachen erkennen, indem Sie regelmäßig die aktuelle Systemzeit mit der vorherigen Systemzeit vergleichen.

Bearbeiten:Hier ist ein Beispiel, das Ihnen helfen könnte, zu erkennen, wann die Maschine in den Ruhezustand wechselt:http://www.codeguru.com/cpp/w-p/system/messagehandling/article.php/c6907

Andere Tipps

Ich weiß, dass es nicht genau das ist, wonach Sie suchen, aber vielleicht ist die richtige Antwort, den Code unter der Annahme zu schreiben, dass Ihre Sockets nicht unbedingt aktiv bleiben.Es gibt viele Gründe, warum die Verbindung abstürzen könnte, beispielsweise weil die Datenbank wegen Wartungsarbeiten heruntergefahren wird oder weil jemand über Ihr Ethernet-Kabel gestolpert ist.Ich denke, Sie hätten ähnliche Probleme mit Fehlern, wenn jemand das Netzwerkkabel herausziehen würde, während Ihre App ausgeführt wird, und das sind keine ungewöhnlichen Zustände, also ist es vielleicht ein besserer Ansatz, diese Zustände elegant zu bewältigen.

Sie könnten einfach JNI oder JNA verwenden, um die Schlaf-/Aufwachereignisse vom Betriebssystem abzufangen.

Aus Windows Power-Ereignisse (MSDN), müssten Sie einen Fensterhandler und ein Nullfenster erstellen, um die WM_POWERBROADCAST-Ereignisse zu empfangen.Diese Fensterprozedur könnte dann eine Ereignisfunktion in Ihrem Java-Code aufrufen, um die Nachricht aufzublasen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top