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




Создайте свою собственную функцию для выполнения ОС команда через командная строка?
Ради примера. Но знайте, где и почему вы хотите использовать это, как отмечают другие.
public static void main(String arg[]) throws IOException{
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("shutdown -s -t 0");
System.exit(0);
}
Первая ссылка в ответе устарела.
Быстрый ответ - нет. Единственный способ сделать это - вызвать специфичные для ОС команды, которые приведут к выключению компьютера, если у вашего приложения есть необходимые права для этого. Это по своей сути непереносимо, поэтому вам нужно либо знать, где будет запускаться ваше приложение, либо иметь разные методы для разных ОС и определять, какой из них использовать.
Вы можете использовать JNI, чтобы сделать это так же, как и в C / C++.
Вот еще один пример, который может работать на разных платформах:
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);
}
Для конкретных команд выключения могут потребоваться разные пути или права администратора.
Моя единственная проблема с этим - будущее. Что, если выйдет другой тип операционной системы и кто-нибудь создаст для этого JVM?
затем вы добавляете новое условие ... программное обеспечение никогда не заканчивается.
Лучше использовать .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();
}
работать нормально
Ра.
Пока кто-нибудь не использует новую ОС под названием Macaroni, где выключение - это команда самоуничтожения.
Я использую эту программу для выключения компьютера за 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");
}
}
В Windows Embedded по умолчанию в cmd нет команды выключения. В таком случае вам нужно добавить эту команду вручную или использовать функцию ExitWindowsEx из win32 (user32.lib) с помощью JNA (если вы хотите больше Java) или JNI (если вам проще будет установить привилегии в коде C).
Вот пример использования 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)
shutdownCommand = "shutdown.exe /s /t " + t;
else
return false;
Runtime.getRuntime().exec(shutdownCommand);
return true;
}
Этот метод учитывает гораздо больше операционных систем, чем любой из приведенных выше ответов. Это также выглядит намного лучше и надежнее, чем проверка свойства os.name.
Редактировать: Поддерживает задержку и все версии Windows (вкл. 8/10).
Спасибо большое, это очень полезно! Вы знаете какой-либо похожий способ засыпать компьютер в каждой ОС?
@JFreeman Извините за поздний ответ, но для будущих людей, ищущих это, вы можете просто изменить команды на любую команду ОС для сна. Теперь он включает поддержку Windows 8+.
В ветви условия для Windows необходимо умножить значение t * 60, поскольку завершение работы Windows измеряется в секундах (по сравнению с минутами в остальной части ОС * nix).
простая одиночная линия
Runtime.getRuntime().exec("shutdown -s -t 0");
но работает только с окнами
+1 нет ничего более java, чем эта строка - Runtime runtime = Runtime.getRuntime ();