Frage

Gibt es eine Möglichkeit einen Computer zur Abschaltung mit einem eingebauten Java-Methode?

Andere Tipps

Hier ist ein weiteres Beispiel, die Cross-Plattform 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 Shutdown-Befehle können verschiedene Pfade oder Administratorrechte erfordern.

Hier ist ein Beispiel unter Verwendung von 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)
        shutdownCommand = "shutdown.exe /s /t " + t;
    else
        return false;

    Runtime.getRuntime().exec(shutdownCommand);
    return true;
}

Dieses Verfahren berücksichtigt eine ganze Menge mehr Betriebssysteme als eine der oben genannten Antworten. Es sieht auch viel schöner und ist zuverlässiger als die os.name Eigenschaft überprüfen.

Edit:. Unterstützt Verzögerung und alle Versionen von Windows (inc. 8/10)

Die schnelle Antwort ist nein. Der einzige Weg, es zu tun ist durch die OS-spezifische Befehle aufrufen, die den Computer zum Herunterfahren verursachen, vorausgesetzt, Ihre Anwendung die erforderlichen Berechtigungen, es zu tun hat. Dies ist von Natur aus nicht tragbar, so dass Sie entweder brauchen würde zu wissen, wo Ihre Anwendung verschiedene Methoden für unterschiedliche Betriebssysteme laufen oder haben und erkennen, welche zu benutzen.

Ich benutze das Programm zum Herunterfahren des Computers in X Minuten.

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

Bessere Nutzung .startsWith als verwenden .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();
}

funktionieren

Ra.

Sie können mit JNI es in was auch immer tun, wie Sie es mit C tun würde / C ++.

Auf standardmäßig Windows Embedded gibt es keinen Befehl zum Herunterfahren in cmd. In einem solchen Fall müssen Sie diesen Befehl manuell hinzufügen oder Funktion ExitWindowsEx von win32 (user32.lib) verwenden, indem JNA (falls Sie mehr Java wollen) oder JNI (falls einfacher für Sie priviliges in C-Code festgelegt wird).

leicht einzelne Zeile

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

aber arbeitet nur auf Windows

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top