首页 > 解决方案 > 如何在 java 中使用 runtime.exec 锁定、关闭、重新启动和挂起 pc?

问题描述

如何在 java 中使用 runtime.exec 锁定、关闭、重新启动和挂起 pc?

我想为windows和linux os制作一个jar。

我想以编程方式锁定、关闭、重新启动和挂起电脑。

我试过这段代码。

package poweroff;

import mousekeyboardcontrol.MouseKeyboardControl;


public class PowerOff {
String os;
Runtime runtime;
public PowerOff() {
    os = System.getProperty("os.name");
    runtime = Runtime.getRuntime();
}

public void shutdown() {     
    try {
        if ("Windows 8.1".equals(os) || "Windows 8.0".equals(os) || "Windows 10".equals(os)) {
            runtime.exec("shutdown -s");
        } else {
            System.out.println("Unsupported operating system");
        }
    } catch(Exception e) {
        System.out.println("shutdown error");
        e.printStackTrace();
    }
    
}

public void restart() {     
    try {
        if ("Windows 8.1".equals(os) || "Windows 8.0".equals(os) || "Windows 10".equals(os)) {
            runtime.exec("shutdown -r");
        } else {
            System.out.println("Unsupported operating system");
        }
    } catch(Exception e) {
        System.out.println("restart error");
        e.printStackTrace();
    }
    
}

public void suspend() {     
    try {
        if ("Windows 8.1".equals(os) || "Windows 8.0".equals(os) || "Windows 10".equals(os)) {
            runtime.exec("Rundll32.exe powrprof.dll,SetSuspendState Sleep");
        } else {
            System.out.println("Unsupported operating system");
        }
    } catch(Exception e) {
        System.out.println("suspend error");
        e.printStackTrace();
    }   
}

public void lock() {     
    try {
        if ("Linux".equals(os) || "Mac OS X".equals(os)) {
            new MouseKeyboardControl().ctrlAltL();
        } else if ("Windows 8.1".equals(os) || "Windows 8.0".equals(os) || "Windows 10".equals(os)) {
            runtime.exec("Rundll32.exe user32.dll,LockWorkStation");
        } else {
            System.out.println("Unsupported operating system");
        }
    } catch(Exception e) {
        System.out.println("pc lock error");
        e.printStackTrace();
    }
    
}

public static void main(String args[]) {
    PowerOff powerOff = new PowerOff();
    powerOff.lock();
}
}

但是,它没有奏效。

我想在 Windows 7、8、10 和所有 linux 操作系统的 java 中以编程方式锁定、关闭、重新启动和挂起。

我该如何解决这个问题?

标签: javaruntime.exec

解决方案


一种解决方案可能是使用带有适当标志的每个操作系统的命令行工具。例如,请参见此处的linux。另请参阅另一个示例的此答案关闭计算机

对于 Windows 关闭尝试:"shutdown -s -t 0" 对于 Windows 重新启动尝试:"shutdown -r -t 0" 对于 Windows 休眠尝试:"shutdown -h -t 0"

对于 Linux 关闭尝试:"shutdown now" 对于 Linux 重新启动尝试:"reboot now"

提示:如果您可以引入依赖项,则使用Apache Commons 的SystemUtils可以帮助以易于阅读/维护的方式正确检查操作系统版本。


推荐阅读