有没有一种方式,当操作系统即将进入睡眠状态,或做不到这一点,至少检测唤醒一个Java程序来检测?
实际的问题是,在一个特定的应用程序的一些MySQL数据库的操作在后台运行。 在Windows机器上测试这些数据库事务的睡眠/唤醒周期产生一吨的程序错误条件后中断。 这些错误通常是这个样子:
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
如果我们能以一个“会睡不久”事件作出反应,我们可以尝试暂停后台操作抢占问题。 理想的少,如果我们能做出反应“刚睡醒”事件,我们至少可以抑制错误消息。
您可以通过当前的系统时间周期比较以前的系统时间检测唤醒。
编辑:这里的,看起来像它会帮你侦测一个例子当机器睡觉: http://www.codeguru.com/cpp/wp/system/messagehandling/article.php/c6907
我知道这不是你要找什么,但也许是正确的答案是尝试写与您的插座不一定会熬夜的假设的代码。 有很多的原因,因为DB采取检修,或因为有人绊倒你的以太网电缆连接可能崩溃,例如。 我认为你必须有错误类似的问题,如果有人拔掉网线,而你的应用程序正在运行,而这些都不是前所未闻的条件,所以也许这是一个更好的办法,试图妥善处理这些条件。
你可以只JNI或JNA捕获来自OS的睡眠/唤醒事件。
从Windows电源活动(MSDN) ,你必须创建一个窗口处理函数和一个空的窗口接收WM_POWERBROADCAST事件。 然后,这个窗口程序可以调用的事件函数在Java代码中泡消息了。