关闭电脑


Answers:


92

创建自己的函数以通过命令行执行OS命令

为了举例。但是要知道,在其他地方以及为什么要使用它。

public static void main(String arg[]) throws IOException{
    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec("shutdown -s -t 0");
    System.exit(0);
}

115
+1没什么比这行更适合的Java-运行时运行时= Runtime.getRuntime();
BRampersad 2011年

答案中的第一个链接已过时。

81

这是另一个可以跨平台工作的示例:

public static void shutdown() throws RuntimeException, IOException {
    String shutdownCommand;
    String operatingSystem = System.getProperty("os.name");

    if ("Linux".equals(operatingSystem) || "Mac OS X".equals(operatingSystem)) {
        shutdownCommand = "shutdown -h now";
    }
    else if ("Windows".equals(operatingSystem)) {
        shutdownCommand = "shutdown.exe -s -t 0";
    }
    else {
        throw new RuntimeException("Unsupported operating system.");
    }

    Runtime.getRuntime().exec(shutdownCommand);
    System.exit(0);
}

特定的关闭命令可能需要不同的路径或管理特权。


我唯一的问题是未来。如果出现另一种类型的操作系统并且有人为此制作了JVM,该怎么办?
Ben Leggiero 2012年

22
然后添加新条件...软件永远不会完成。
古巴创(Gubatron),2014年

37

这是使用Apache Commons Lang的 SystemUtils示例

public static boolean shutdown(int time) throws IOException {
    String shutdownCommand = null, t = time == 0 ? "now" : String.valueOf(time);

    if(SystemUtils.IS_OS_AIX)
        shutdownCommand = "shutdown -Fh " + t;
    else if(SystemUtils.IS_OS_FREE_BSD || SystemUtils.IS_OS_LINUX || SystemUtils.IS_OS_MAC|| SystemUtils.IS_OS_MAC_OSX || SystemUtils.IS_OS_NET_BSD || SystemUtils.IS_OS_OPEN_BSD || SystemUtils.IS_OS_UNIX)
        shutdownCommand = "shutdown -h " + t;
    else if(SystemUtils.IS_OS_HP_UX)
        shutdownCommand = "shutdown -hy " + t;
    else if(SystemUtils.IS_OS_IRIX)
        shutdownCommand = "shutdown -y -g " + t;
    else if(SystemUtils.IS_OS_SOLARIS || SystemUtils.IS_OS_SUN_OS)
        shutdownCommand = "shutdown -y -i5 -g" + t;
    else if(SystemUtils.IS_OS_WINDOWS)
        shutdownCommand = "shutdown.exe /s /t " + t;
    else
        return false;

    Runtime.getRuntime().exec(shutdownCommand);
    return true;
}

与上述任何答案相比,此方法考虑的操作系统要多得多。它看起来也更好,并且比检查该os.name属性更可靠。

编辑:支持延迟和Windows的所有版本(inc。8/10)。


非常感谢,这非常有用!您知道在每个操作系统中都有类似的使计算机休眠的方式吗?
JFreeman

1
@JFreeman抱歉,您的回复很晚,但是对于以后寻求此答案的人们,您可以将命令更改为用于睡眠的OS命令。现在,它包括Windows 8+支持。
Kezz

在该条件的Windows分支中,您必须将t值* 60乘以Windows关机时间(以秒为单位)(其余* nix OS中为分钟)。
路易斯·U。20年

22

快速答案是不。唯一的方法是调用特定于操作系统的命令,这些命令将导致计算机关闭,前提是您的应用程序具有执行此操作所需的特权。这本质上是不可移植的,因此您需要知道您的应用程序将在何处运行,或者需要针对不同的操作系统使用不同的方法并检测要使用哪个操作系统。


8

我使用此程序在X分钟内关闭了计算机。

   public class Shutdown {
    public static void main(String[] args) {

        int minutes = Integer.valueOf(args[0]);
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                ProcessBuilder processBuilder = new ProcessBuilder("shutdown",
                        "/s");
                try {
                    processBuilder.start();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

        }, minutes * 60 * 1000);

        System.out.println(" Shutting down in " + minutes + " minutes");
    }
 }

7

最好使用.startsWith比使用.equals ...

String osName = System.getProperty("os.name");        
if (osName.startsWith("Win")) {
  shutdownCommand = "shutdown.exe -s -t 0";
} else if (osName.startsWith("Linux") || osName.startsWith("Mac")) {
  shutdownCommand = "shutdown -h now";
} else {
  System.err.println("Shutdown unsupported operating system ...");
    //closeApp();
}

做工不错


30
直到有人使用名为Macaroni的新操作系统,其中shutdown是self-destruct命令。
Bart van Heukelom 2010年


1

默认情况下,在Windows Embedded中,cmd中没有shutdown命令。在这种情况下,您需要手动添加此命令,或者通过使用JNA(如果需要更多Java)或JNI(如果更方便,可以在C代码中设置特权)使用win32(user32.lib)中的ExitWindowsEx函数。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.