Pergunta

Existe uma maneira de desligar um computador usando um método Java integrado?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top