如何解决Mac OS 电源事件关闭
我想用 Java 编写一个程序,当电源关闭和电池模式启动时,它会监听来自 mac os 的事件。
我没有在这个方向上取得任何进展。
解决方法
我不认为 Java 有任何针对此行为的预定义库函数,但这里有一个想法:创建一个后台线程,定期检查电源是否通过 pmset(1)
插入。然后该线程可以启动其他内容。
例如,如果未插入交流电源,以下内容将导致程序退出。您可以根据需要进行扩展。
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.logging.Logger;
import java.util.logging.Level;
public class BatteryPower {
private static int INTERVAL = 1000;
private static void batteryPoller() {
while (true) {
try {
// spawn process and check stdin
Process proc = Runtime.getRuntime().exec("pmset -g ps");
BufferedReader stdin = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String s = stdin.readLine();
if (s != null && !s.contains("AC Power"))
System.exit(0);
// cleanup and wait
stdin.close();
proc.destroyForcibly();
Thread.sleep(INTERVAL);
}
catch (IOException|InterruptedException e) {
Logger.getLogger(BatteryPower.class.getName()).severe(e.toString());
// consider exiting or changing INTERVAL here
}
}
}
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
batteryPoller();
}
};
new Thread(r).start();
// main exits,but process doesn't exit until this thread exits.
}
}
这仅适用于 macOS。为 Windows 结帐 this answer。 (我的回答部分基于那个。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。