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

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

Ответ 1

Создайте свою собственную функцию для выполнения 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

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

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

Вот пример использования 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_XP || SystemUtils.IS_OS_WINDOWS_VISTA || SystemUtils.IS_OS_WINDOWS_7)
        shutdownCommand = "shutdown.exe -s -t " + t;
    else
        return false;

    Runtime.getRuntime().exec(shutdownCommand);
    return true;
}

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

Изменить: Теперь у пользователя есть возможность ввести задержку, если они нравятся!

Ответ 4

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

Ответ 5

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

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

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

Ответ 8

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

Ответ 9

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

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

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