Вопрос

Есть ли способ для Java-программы определить, когда операционная система собирается перейти в спящий режим или, если это не удалось, по крайней мере, обнаружив пробуждение?

Фактическая проблема заключается в том, что в конкретном приложении ряд операций с базой данных MySQL выполняется в фоновом режиме. При тестировании на компьютере с Windows эти транзакции базы данных прерываются после цикла сна / пробуждения, что вызывает массу ошибок в программе. Эти ошибки обычно выглядят примерно так:

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

Если бы мы могли отреагировать на событие «скоро будет спать», мы могли бы попытаться приостановить фоновые операции, предупреждающие проблему. Менее идеально, если бы мы могли реагировать на событие «только что проснулся», мы могли бы по крайней мере подавить сообщения об ошибках.

Это было полезно?

Решение

Вы можете обнаружить пробуждение, периодически сравнивая текущее системное время с предыдущим системным временем.

Изменить: вот пример, который выглядит так, как будто он поможет вам определить, когда машина будет спать: http://www.codeguru.com/cpp/wp/system /messagehandling/article.php/c6907

Другие советы

Я знаю, что это не совсем то, что вы ищете, но, возможно, правильный ответ - попытаться написать код с предположением, что ваши сокеты не обязательно будут работать. Существует множество причин, по которым может произойти сбой соединения, например, из-за того, что БД отключена из-за технического обслуживания, или из-за того, что кто-то отключил ваш кабель Ethernet. Я думаю, у вас возникнут аналогичные проблемы с ошибками, если кто-то выдернет сетевой кабель во время работы вашего приложения, и это не неслыханные условия, поэтому, возможно, это лучший подход, чтобы попытаться изящно справиться с этими условиями.

Вы можете просто использовать JNI или JNA для перехвата событий сна / пробуждения из ОС.

Из событий Windows Power (MSDN) , вам нужно создать обработчик окна и нулевое окно для получения событий WM_POWERBROADCAST. Эта оконная процедура может затем вызвать функцию события в вашем Java-коде, чтобы всплыть сообщение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top