Shutting down a computer

JavaCross PlatformShutdown

Java Problem Overview


Is there a way to shutdown a computer using a built-in Java method?

Java Solutions


Solution 1 - Java

Create your own function to execute an OS command through the command line?

For the sake of an example. But know where and why you'd want to use this as others note.

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

Solution 2 - Java

Here's another example that could work cross-platform:

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

The specific shutdown commands may require different paths or administrative privileges.

Solution 3 - Java

Here is an example using Apache Commons Lang's 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;
}

This method takes into account a whole lot more operating systems than any of the above answers. It also looks a lot nicer and is more reliable then checking the os.name property.

Edit: Supports delay and all versions of Windows (inc. 8/10).

Solution 4 - Java

The quick answer is no. The only way to do it is by invoking the OS-specific commands that will cause the computer to shutdown, assuming your application has the necessary privileges to do it. This is inherently non-portable, so you'd need either to know where your application will run or have different methods for different OSs and detect which one to use.

Solution 5 - Java

I use this program to shutdown the computer in 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");
	}
 }

Solution 6 - Java

Better use .startsWith than use .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();
}

work fine

Ra.

Solution 7 - Java

You can use http://en.wikipedia.org/wiki/Java_Native_Interface">JNI</a> to do it in whatever way you'd do it with C/C++.

Solution 8 - Java

On Windows Embedded by default there is no shutdown command in cmd. In such case you need add this command manually or use function ExitWindowsEx from win32 (user32.lib) by using JNA (if you want more Java) or JNI (if easier for you will be to set priviliges in C code).

Solution 9 - Java

easy single line

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

but only work on windows

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjjnguyView Question on Stackoverflow
Solution 1 - JavaDavid McGrawView Answer on Stackoverflow
Solution 2 - JavaDavid CrowView Answer on Stackoverflow
Solution 3 - JavaKezzView Answer on Stackoverflow
Solution 4 - JavaWilsonView Answer on Stackoverflow
Solution 5 - JavaJonathan BarberoView Answer on Stackoverflow
Solution 6 - JavaRa.View Answer on Stackoverflow
Solution 7 - JavaSteve MView Answer on Stackoverflow
Solution 8 - JavaWaldemar WosińskiView Answer on Stackoverflow
Solution 9 - JavaAndrea BoriView Answer on Stackoverflow