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

голоса
62

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

Задан 25/08/2008 в 05:01
источник пользователем
На других языках...                            


9 ответов

голоса
75

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

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

public static void main(String arg[]) throws IOException{
    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec("shutdown -s -t 0");
    System.exit(0);
}
Ответил 25/08/2008 в 05:08
источник пользователем

голоса
71

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

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

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

Ответил 25/08/2008 в 05:47
источник пользователем

голоса
27

Ниже приведен пример использования Apache Commons Ланг 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свойства.

Edit: теперь есть возможность для пользователя , чтобы ввести задержку , если им нравится!

Ответил 12/01/2013 в 20:56
источник пользователем

голоса
22

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

Ответил 25/08/2008 в 05:14
источник пользователем

голоса
8

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

голоса
5

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

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

Ra.

Ответил 28/01/2010 в 09:55
источник пользователем

голоса
2

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

Ответил 25/08/2008 в 05:17
источник пользователем

голоса
1

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

Ответил 31/05/2012 в 09:28
источник пользователем

голоса
0

легкая одиночная линия

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

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

Ответил 06/11/2014 в 14:34
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more