Desligando um computador
-
09-06-2019 - |
Pergunta
Existe uma maneira de desligar um computador usando um método Java integrado?
Solução
Crie sua própria função para executar um sistema operacional comando através de linha de comando?
A título de exemplo.Mas saiba onde e por que você deseja usar isso, como outros observam.
public static void main(String arg[]) throws IOException{
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("shutdown -s -t 0");
System.exit(0);
}
Outras dicas
Aqui está outro exemplo que pode funcionar em várias plataformas:
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);
}
Os comandos de desligamento específicos podem exigir caminhos ou privilégios administrativos diferentes.
Aqui está um exemplo usando Apache Commons Lang's Utilitários de sistema:
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;
}
Este método leva em consideração muito mais sistemas operacionais do que qualquer uma das respostas acima.Também parece muito melhor e é mais confiável do que verificar o os.name
propriedade.
Editar: Suporta atraso e todas as versões do Windows (inc.8/10).
A resposta rápida e não.A única maneira de fazer isso é invocando comandos específicos do sistema operacional que farão com que o computador seja desligado, assumindo que seu aplicativo tenha os privilégios necessários para fazê-lo.Isso é inerentemente não portátil, então você precisa saber onde seu aplicativo será executado ou ter métodos diferentes para diferentes sistemas operacionais e detectar qual deles usar.
Eu uso este programa para desligar o computador em X minutos.
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");
}
}
Melhor usar .startsWith do que usar .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();
}
funciona bem
Rá.
Você pode usar JNI fazer isso da maneira que você faria com C/C++.
No Windows Embedded, por padrão, não há comando de desligamento no cmd.Nesse caso você precisa adicionar este comando manualmente ou usar a função ExitWindowsEx do win32 (user32.lib) usando JNA (se quiser mais Java) ou JNI (se for mais fácil para você será definir privilégios no código C).
linha única fácil
Runtime.getRuntime().exec("shutdown -s -t 0");
mas só funciona no Windows