【问题标题】:How to detect that a PC has been idle for 30 seconds using Java?如何使用 Java 检测 PC 已空闲 30 秒?
【发布时间】:2009-03-05 10:20:22
【问题描述】:

如何使用 Java 检测 PC 空闲 30 秒?

已编辑

空闲是指没有用户活动。用户在 30 秒内什么都不做。我想做一个像 Windows 这样的应用程序,它检测到用户什么都不做,然后进入 stad-by。

【问题讨论】:

  • 您能否以更具体的方式重新表述您的问题?
  • 您需要定义“空闲” - 是没有用户输入、没有磁盘活动、没有运行的进程、平均 CPU 负载还是什么?
  • “空闲”是什么意思?没有/很少的 CPU 活动(多进程系统呢)?没有用户输入?没有网络流量?没有硬盘 I/O?

标签: java


【解决方案1】:

我遇到过这个使用JNA 检测系统范围空闲时间的出色示例。 Java Native Access (JNA) 是一个库,无需您实际编写本机代码即可提供对 Java Native Interface (JNI) 的访问。

Here's the example 非常接近您的要求。

【讨论】:

    【解决方案2】:

    按要求不可能,但您可以使用java.lang.management API 创建解决方法。 JNI 实现也可以在 javaworld 上找到。

    【讨论】:

      【解决方案3】:

      直接从 java 是不可能的。您必须找到一些本机库并为此创建一个 JNI 包装器。

      【讨论】:

        【解决方案4】:

        不容易看一下 OperatingSystemMXBean 方法 getSystemLoadAverage() 仅在 java 6 之后可用,您可以跟踪它,如果它在一段时间内相同,则确定 pc 处于空闲状态。

        这假设空闲 CPU 处于空闲状态

        操作系统MXBean 操作系统MxBean = ManagementFactory.getOperatingSystemMXBean();

        【讨论】:

        • 在 Windows 7 上它总是返回 -1。有什么提示吗?
        • 根据JavaDoc。如果负载平均值不可用,则返回负值。这种方法在 Windows 7 上运行可能会很不走运。
        猜你喜欢
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 2011-06-10
        • 1970-01-01
        • 2011-03-06
        • 2011-03-07
        相关资源
        最近更新 更多