Chiusura di un computer

C’è un modo per spegnere un computer usando un metodo Java integrato?

Crea la tua funzione per eseguire un comando OS tramite la riga di comando ?

Per fare un esempio. Ma sappi dove e perché vorresti usarlo come altri.

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

Ecco un altro esempio che potrebbe funzionare su più piattaforms:

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

I comandi specifici di spegnimento possono richiedere percorsi diversi o privilegi amministrativi.

Ecco un esempio usando SystemUtils di Apache Commons Lang :

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

Questo metodo tiene conto di molti più sistemi operativi rispetto a qualsiasi delle risposte precedenti. Sembra anche molto più bello ed è più affidabile, quindi controlla la proprietà os.name .

Modifica: ora ha l’opzione per l’utente di inserire un ritardo se lo desiderano!

La risposta rapida è no. L’unico modo per farlo è richiamare i comandi specifici del sistema operativo che causeranno l’arresto del computer, presupponendo che l’applicazione disponga dei privilegi necessari per farlo. Questo è intrinsecamente non portabile, quindi è necessario conoscere la posizione in cui verrà eseguita l’applicazione o disporre di metodi diversi per sistemi operativi diversi e individuare quale utilizzare.

Io uso questo programma per spegnere il computer in X minuti.

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

Meglio usare .startsWith che usare .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(); } 

funziona bene

RA.

Puoi usare JNI per farlo in qualsiasi modo lo faresti con C / C ++.

Su Windows Embedded per impostazione predefinita non esiste un comando di arresto in cmd. In tal caso è necessario aggiungere manualmente questo comando o utilizzare la funzione ExitWindowsEx da win32 (user32.lib) utilizzando JNA (se si desidera più Java) o JNI (se sarà più semplice impostare i privilegi nel codice C).

semplice linea singola

 Runtime.getRuntime().exec("shutdown -s -t 0"); 

ma funziona solo su Windows