70 votes

Éteindre un ordinateur

Est-il possible d'arrêter un ordinateur à l'aide d'une méthode Java intégrée?

94voto

David McGraw Points 3498

Créez votre propre fonction pour exécuter une commande de système d'exploitation via la ligne de commande ?

Par exemple. Mais sachez où et pourquoi vous voudriez l’utiliser comme le notent les autres.

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

82voto

David Crow Points 7704

Voici un autre exemple qui pourrait fonctionner sur plusieurs plates-formes:

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

Les commandes d'arrêt spécifiques peuvent nécessiter des chemins d'accès ou des privilèges d'administrateur différents.

38voto

Kezz101 Points 583

Voici un exemple d'utilisation d'Apache Commons Lang 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;
}

Cette méthode prend en compte un ensemble beaucoup plus les systèmes d'exploitation que l'une des réponses ci-dessus. Aussi, il semble beaucoup plus agréable et est plus fiable, la vérification de l' os.name de la propriété.

Edit: Il a maintenant la possibilité pour l'utilisateur de saisir un retard si ils aiment!

22voto

Wilson Points 411

La réponse rapide est non. La seule façon de le faire consiste à appeler les commandes spécifiques au système d'exploitation qui entraîneront l'arrêt de l'ordinateur, en supposant que votre application dispose des privilèges nécessaires pour le faire. Ceci est par nature non-portable, vous devez donc savoir où votre application sera exécutée ou utiliser différentes méthodes pour différents systèmes d’exploitation et déterminer lequel utiliser.

8voto

Jonathan Barbero Points 883

J'utilise ce programme pour éteindre l'ordinateur en X minutes.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X