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

===============>>#1 票数:82 已采纳

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

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

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

===============>>#2 票数:76

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

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

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

===============>>#3 票数:27

这是使用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)。

===============>>#4 票数:22

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

===============>>#5 票数: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");
    }
 }

===============>>#6 票数:5

最好使用.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();
}

做工不错

===============>>#7 票数:2

您可以使用JNI来完成C / C ++的任何操作。

===============>>#8 票数:1

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

===============>>#9 票数:1

简易单行

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

但仅适用于Windows

  ask by jjnguy translate from so

未解决问题?本站智能推荐:

1回复

赶上OS X关闭

请帮忙 找不到有关如何检测OS X现在是否正在关闭的信息。 在Windows中很简单: 如何在OS X上执行此操作? 还是跨平台的(Linux也是)?
2回复

如何关闭ExecutorService?

每当我调用shutdownNow()或shutdown()它都不会关闭。 我读到了一些线程,它说不能保证关闭 - 有人能为我提供一个好方法吗?
2回复

以编程方式关闭Netty

我正在使用netty 4.0.24.Final。 我需要以编程方式启动/停止Netty服务器。 启动服务器时,线程在以下位置被阻塞 f.channel().closeFuture().sync() 请提供一些提示,以帮助您正确地进行操作。 下面是Main类调用的EchoS
4回复

使用Java关闭Windows

是否可以使用Java以编程方式关闭Windows? 干杯
1回复

WebDriver正确关闭

我想知道一段时间了,最​​好的方法是在抛出期望或测试用例完成之后进行适当的清理。 提醒一下:根据实现的.exe进程驱动程序,即conhost.exe,浏览器和Java应用程序已启动。 使用driver.quit() ,我们可以在完成测试用例之后终止驱动程序进程,托管服务器和浏览器。
2回复

在Windows强制关闭时捕获JFrame关闭并记录它

我正在运行GUI。 如果Windows被强制重新启动,我希望我的GUI在关闭之前立即记录下来。 我正在使用以下代码,当您单击“ X”以关闭窗口时,它可以工作,但是如果窗口强制将其关闭,则它将无法工作。
2回复

关闭Apache CXFServlet

我正在执行一个提供多种服务方法的CXF Servlet。 web.xml中: 我怎样才能以编程方式正确地将这样一个正在运行的服务器实例放下来?
2回复

Java关闭挂钩

我在程序中添加了以下代码: 但是,我没有看到该消息。 附加信息:我正在Java 7的Netbeans IDE内部运行该程序。 编辑:我忘了补充说,有一个使程序保持活动状态的全局线程。 我按Netbeans右下角的[x]将其关闭。
1回复

嵌套JavaFX ExecutorService关闭

例如,如果您在JavaFX中有一个ExecutorServic(ES)来启动一个任务,该任务又包含另一个ES并启动新任务。 -当第一个ES关闭时,第二个ES的线程将发生什么。 我假设它们不会被关闭(因为如果我理解正确的话,只有主线程被关闭时它们不会关闭)。
2回复

如何正确关闭java ExecutorService

我有一个简单的java ExecutorService ,它运行一些任务对象(实现Callable )。 完成所有任务(DONE或TIMEOUT-ed)后,我尝试关闭执行程序,但它不会停止: exec.isTerminated() = FALSE. 我怀疑一些有时间的任务没有被正确终止