70

有没有办法使用内置的 Java 方法关闭计算机?

4

9 回答 9

94

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

举个例子。但要知道你想在哪里以及为什么要使用它,就像其他人所说的那样。

public static void main(String arg[]) throws IOException{
    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec("shutdown -s -t 0");
    System.exit(0);
}
于 2008-08-25T04:08:28.970 回答
82

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

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);
}

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

于 2008-08-25T04:47:04.010 回答
38

这是使用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(包括 8/10)。

于 2013-01-12T19:56:56.437 回答
22

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

于 2008-08-25T04:14:12.793 回答
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");
    }
 }
于 2010-02-06T16:13:27.963 回答
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();
}

工作正常

拉。

于 2010-01-28T08:55:33.033 回答
2

您可以使用JNI以使用 C/C++ 的任何方式执行此操作。

于 2008-08-25T04:17:05.157 回答
1

默认情况下,在 Windows Embedded 上,cmd 中没有关闭命令。在这种情况下,您需要手动添加此命令或通过使用 JNA(如果您想要更多 Java)或 JNI(如果您更容易在 C 代码中设置权限)来使用 win32 (user32.lib) 中的函数 ExitWindowsEx。

于 2012-05-31T08:28:16.377 回答
1

简单的单行

Runtime.getRuntime().exec("shutdown -s -t 0");

但只能在 Windows 上工作

于 2014-11-06T14:34:28.390 回答