如何让Java应用程序检测到Linux PC已从暂停状态恢复(睡眠模式)?

时间:2011-11-19 21:25:43

标签: java linux suspend

在Linux上运行的Java Swing桌面应用程序(例如,Ubuntu)中,如何通知应用程序PC刚刚从睡眠/暂停/休眠状态恢复?

屏幕消隐不是问题。所有其他暂停或休眠状态(暂停到RAM或暂停到磁盘)都是有意义的(为了我的目的,它们都将被视为相同)。

我的目标是在PC或设备恢复时自动调用类方法。 (该方法需要重启rxtxSerial,fwiw。)

编辑:ThorbjørnRavnAndersen的评论让我意识到我的问题不明确。我的目标是监听一个操作系统事件(或利用系统日志文件),该事件表明系统刚从暂停状态恢复。

3 个答案:

答案 0 :(得分:3)

让守护程序线程读取系统时间,比如每秒一次。如果两个读数之间存在(明显的)差距,则系统刚刚醒来。但是,不确定这是否会阻止系统首先进入睡眠状态。

答案 1 :(得分:0)

据我所知,默认的Java运行时中没有提供此类信息的类,而且据我所知 - 没有标准的方法可以告诉这些信息。

我建议您弄清楚如何从操作系统获取所需信息 - 例如每次系统更改挂起状态时都可以安装并运行的脚本 - 让脚本/本机二进制文件向您的Java程序发送消息(或将文件放在商定的位置)。

考虑到Linux机器是多用户系统,并且您的程序可能会被多次调用,因此您在设计机制时应该小心谨慎。

出于好奇,为什么你的程序需要知道?

答案 2 :(得分:0)

以下是Canonical支持工程师的建议。


20/11/2011 22:53 |贾森 我的建议是在/etc/pm/sleep.d/下创建一个脚本。从暂停恢复时将执行该脚本。有关详细信息,请参阅/usr/share/doc/pm-utils/HOWTO.hooks.gz。


以下是该文件的介绍:

如何编写pm-utils钩子:

参数

pm-utils钩子只是一个可接受至少一个的可执行文件 参数。

对于sleep.d中的钩子,第一个参数的潜在值是:

suspend - 钩子必须执行任何适当的动作        系统正准备记忆睡眠(或其等效物)。

resume - 钩子必须执行任何适当的动作     系统即将暂停。

hibernate - 钩子必须执行任何适当的动作     系统正准备暂停磁盘。

解冻 - 钩子必须执行系统时适当的任何动作     正在暂停到磁盘。

help - 如果你的钩子解析了交换机的PM_CMDLINE环境变量,     这个函数应该输出描述它解析的参数的文本     以最终用户易于理解的格式。

正在使用的实际睡眠方法将作为第二个参数传递 - 如果你的钩子需要处理suspend-hybrid(或任何其他特定于平台的) 睡眠方法),它应检查第二个参数。

对于power.d中的钩子,该参数的潜在值为: true - 钩子必须执行系统时适当的任何操作     过渡到电池电量。 false - 钩子必须执行系统时适当的任何操作     从电池电源转换。

这是一个例子:

#!/bin/bash
case "$1" in
hibernate|suspend)
    ACTION BEFORE SUSPEND/HIBERNATE
    ;;
thaw|resume)
    ACTION AFTER RESUME
    ;;
*)
    ;;
esac
exit $?