11

Java程序有没有办法检测操作系统何时即将进入睡眠状态,或者失败,至少检测到唤醒?

实际问题是在特定应用程序中,许多 MySQL 数据库操作在后台运行。在 Windows 机器上进行测试时,这些数据库事务在睡眠/唤醒周期后被中断,导致程序中出现大量错误情况。这些错误通常如下所示:

java.net.SocketException
消息:软件导致连接中止:recv 失败

如果我们可以对“即将休眠”事件做出反应,我们可以尝试暂停后台操作以抢占问题。不太理想的是,如果我们可以对“刚醒来”事件做出反应,我们至少可以抑制错误消息。

4

3 回答 3

10

您可以通过定期将当前系统时间与之前的系统时间进行比较来检测唤醒。

编辑:这是一个看起来可以帮助您检测机器何时进入睡眠状态的示例:http: //www.codeguru.com/cpp/wp/system/messagehandling/article.php/c6907

于 2009-07-31T15:55:46.643 回答
3

我知道这并不完全是您要寻找的东西,但也许正确的答案是尝试编写代码,假设您的套接字不一定会保持打开状态。连接可能会崩溃的原因有很多,例如,因为 DB 被拆除以进行维护,或者因为有人绊倒了您的以太网电缆。我认为如果有人在您的应用程序运行时拔出网络电缆,您会遇到类似的错误问题,而这些情况并非闻所未闻,因此尝试优雅地处理这些情况也许是一种更好的方法。

于 2009-07-31T16:20:51.260 回答
3

您可以只使用 JNI 或 JNA 从操作系统捕获睡眠/唤醒事件。

Windows Power Events (MSDN)中,您必须创建一个窗口处理程序和一个空窗口来接收 WM_POWERBROADCAST 事件。然后,此窗口过程可以在您的 Java 代码中调用事件函数来使消息冒泡。

于 2009-07-31T18:15:52.570 回答