Gibt es eine Möglichkeit, einen Computer mit einer integrierten Java-Methode herunterzufahren?
java
cross-platform
shutdown
jjnguy
quelle
quelle
Hier ist ein weiteres Beispiel, das plattformübergreifend funktionieren könnte:
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); }
Die spezifischen Befehle zum Herunterfahren erfordern möglicherweise unterschiedliche Pfade oder Administratorrechte.
quelle
Hier ist ein Beispiel für die Verwendung von SystemUtils von 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) shutdownCommand = "shutdown.exe /s /t " + t; else return false; Runtime.getRuntime().exec(shutdownCommand); return true; }
Diese Methode berücksichtigt viel mehr Betriebssysteme als jede der oben genannten Antworten. Es sieht auch viel schöner aus und ist zuverlässiger als die Überprüfung der
os.name
Eigenschaft.Bearbeiten: Unterstützt Delay und alle Windows-Versionen (inkl. 8/10).
quelle
Die schnelle Antwort lautet nein. Die einzige Möglichkeit, dies zu tun, besteht darin, die betriebssystemspezifischen Befehle aufzurufen, die zum Herunterfahren des Computers führen, sofern Ihre Anwendung über die erforderlichen Berechtigungen verfügt. Dies ist von Natur aus nicht portierbar. Sie müssen also entweder wissen, wo Ihre Anwendung ausgeführt wird, oder verschiedene Methoden für verschiedene Betriebssysteme verwenden und ermitteln, welche verwendet werden soll.
quelle
Ich benutze dieses Programm, um den Computer in X Minuten herunterzufahren.
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"); } }
quelle
Verwenden Sie .startsWith besser als .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(); }
funktioniert gut
Ra.
quelle
Sie können JNI verwenden , um es so zu tun, wie Sie es mit C / C ++ tun würden.
quelle
Unter Windows Embedded gibt es standardmäßig keinen Befehl zum Herunterfahren in cmd. In diesem Fall müssen Sie diesen Befehl manuell hinzufügen oder die Funktion ExitWindowsEx von win32 (user32.lib) verwenden, indem Sie JNA (wenn Sie mehr Java möchten) oder JNI (wenn es für Sie einfacher ist, Privilegien in C-Code festzulegen) verwenden.
quelle
einfache einzeilige
Runtime.getRuntime().exec("shutdown -s -t 0");
aber nur unter Windows arbeiten
quelle