Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Вот пример использования Apache Commons Лэнга Системные утилиты:

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

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

Я использую эту программу для выключения компьютера за Х минут.

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

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

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

Ра.

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

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

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

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

но работает только в Windows

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top