2008-08-25 6 views

ответ

75

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

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

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

+1 ничего более ява, чем эта линия - Runtime выполнения = Runtime.getRuntime(); – BRampersad 2011-10-23 23:40:56

+2

Будет ли это работать только на окнах или где угодно? – 2012-09-06 21:08:37

+4

Это будет работать только на Windows. – partlov 2013-01-12 20:01:41

22

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

2

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

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

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

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.

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

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

27

Вот пример использования 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_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.

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

0

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

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

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

Смежные вопросы