Est-il possible d'arrêter un ordinateur à l'aide d'une méthode Java intégrée?
Réponses
Trop de publicités?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);
}
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.
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!
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.
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");
}
}