3

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

屏幕空白不是问题。所有其他暂停或休眠状态(暂停到 RAM 或暂停到磁盘)都是有意义的(出于我的目的,它们都将被同等对待)。

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

编辑:Thorbjørn Ravn Andersen 的评论让我意识到我的问题并不清楚。我的目标是监听操作系统事件(或利用系统日志文件),这表明系统刚刚从挂起状态恢复。

4

3 回答 3

4

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

于 2011-11-19T22:19:02.720 回答
0

据我所知,默认 Java 运行时中没有提供此信息的类,而且据我所知,也没有标准的方式来告知这些事情。

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

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

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

于 2011-11-19T22:38:39.963 回答
0

这是 Canonical 支持工程师的建议。


20/11/2011 22:53 | Jason 我的建议是在 /etc/pm/sleep.d/ 下创建一个脚本。该脚本将在从挂起恢复时执行。详情请参考 /usr/share/doc/pm-utils/HOWTO.hooks.gz。


这是该文件的介绍:

如何编写一个 pm-utils 钩子:

参数

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

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

挂起——当系统准备内存睡眠(或等效的)时,钩子必须执行任何适当的操作。

resume -- 当系统退出挂起时,钩子必须执行任何适当的操作。

hibernate——当系统准备挂起到磁盘时,钩子必须执行任何适当的操作。

thaw -- 当系统从磁盘挂起状态退出时,挂钩必须执行任何适当的操作。

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

实际使用的睡眠方法将作为第二个参数传递——如果您的钩子需要处理挂起混合(或任何其他特定于平台的睡眠方法),它应该检查第二个参数。

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

这是一个例子:

#!/bin/bash
case "$1" in
hibernate|suspend)
    ACTION BEFORE SUSPEND/HIBERNATE
    ;;
thaw|resume)
    ACTION AFTER RESUME
    ;;
*)
    ;;
esac
exit $?
于 2011-11-22T21:26:24.357 回答