Выключение компьютера - PullRequest
       22

Выключение компьютера

65 голосов
/ 25 августа 2008

Есть ли способ выключить компьютер с помощью встроенного метода Java?

Ответы [ 9 ]

82 голосов
/ 25 августа 2008

Создайте собственную функцию для выполнения команды ОС через командную строку ?

Ради примера. Но знайте, где и почему вы хотите использовать это как примечание других.

public static void main(String arg[]) throws IOException{
    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec("shutdown -s -t 0");
    System.exit(0);
}
75 голосов
/ 25 августа 2008

Вот еще один пример, который может работать кроссплатформенно:

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

Для определенных команд завершения работы могут потребоваться разные пути или права администратора.

27 голосов
/ 12 января 2013

Вот пример использования Apache Commons Lang's 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).

22 голосов
/ 25 августа 2008

Быстрый ответ - нет. Единственный способ сделать это - вызвать специфичные для ОС команды, которые приведут к выключению компьютера, при условии, что ваше приложение обладает необходимыми привилегиями для этого. Это изначально непереносимо, поэтому вам нужно либо знать, где будет работать ваше приложение, либо использовать разные методы для разных ОС, и определить, какую из них использовать.

8 голосов
/ 06 февраля 2010

Я использую эту программу для выключения компьютера через 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");
    }
 }
5 голосов
/ 28 января 2010

Лучше использовать .starts, чем использовать .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();
}

отлично работает

Ra.

2 голосов
/ 25 августа 2008

Вы можете использовать JNI , чтобы делать это так, как вы делаете это с C / C ++.

1 голос
/ 06 ноября 2014

простая одиночная строка

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

но работает только на windows

1 голос
/ 31 мая 2012

В Windows Embedded по умолчанию нет команды выключения в cmd. В таком случае вам нужно добавить эту команду вручную или использовать функцию ExitWindowsEx из win32 (user32.lib) с помощью JNA (если вам нужно больше Java) или JNI (если вам проще будет установить привилегии в коде C).

...