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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
68
0
99 750
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

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

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

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

+1 нет ничего более java, чем эта строка - Runtime runtime = Runtime.getRuntime ();

BRampersad 24.10.2011 03:40

Первая ссылка в ответе устарела.

Pang 09.05.2018 12:48

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

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

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

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 22.01.2012 10:24

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

Gubatron 20.08.2014 18:34

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

работать нормально

Ра.

Пока кто-нибудь не использует новую ОС под названием Macaroni, где выключение - это команда самоуничтожения.

Bart van Heukelom 17.06.2010 17:26

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

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

Вот пример использования Apache Commons Lang'sSystemUtils:

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).

Спасибо большое, это очень полезно! Вы знаете какой-либо похожий способ засыпать компьютер в каждой ОС?

JFreeman 05.01.2018 05:15

@JFreeman Извините за поздний ответ, но для будущих людей, ищущих это, вы можете просто изменить команды на любую команду ОС для сна. Теперь он включает поддержку Windows 8+.

Kezz 27.02.2019 18:44

В ветви условия для Windows необходимо умножить значение t * 60, поскольку завершение работы Windows измеряется в секундах (по сравнению с минутами в остальной части ОС * nix).

Luis U. 20.05.2020 16:53

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

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

но работает только с окнами

Другие вопросы по теме