Вопрос:

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

java cross-platform shutdown

89170 просмотра

9 ответа

107956 Репутация автора

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

Автор: jjnguy Источник Размещён: 25.08.2008 04:01

Ответы (9)


82 плюса

4104 Репутация автора

Решение

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

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

public static void main(String arg[]) throws IOException{
    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec("shutdown -s -t 0");
    System.exit(0);
}
Автор: David McGraw Размещён: 25.08.2008 04:08

22 плюса

506 Репутация автора

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

Автор: Wilson Размещён: 25.08.2008 04:14

2 плюса

5983 Репутация автора

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

Автор: Steve M Размещён: 25.08.2008 04:17

74 плюса

12843 Репутация автора

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

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

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

Автор: David Crow Размещён: 25.08.2008 04:47

5 плюса

51 Репутация автора

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

Автор: Ra. Размещён: 28.01.2010 08:55

8 плюса

1617 Репутация автора

Я использую эту программу, чтобы выключить компьютер через 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");
    }
 }
Автор: Jonathan Barbero Размещён: 06.02.2010 04:13

1 плюс

1195 Репутация автора

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

Автор: Waldemar Wosiński Размещён: 31.05.2012 08:28

27 плюса

1058 Репутация автора

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

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

Автор: Kezz101 Размещён: 12.01.2013 07:56

0 плюса

173 Репутация автора

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

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

но работают только на окнах

Автор: Andrea Bori Размещён: 06.11.2014 02:34
Вопросы из категории :
32x32