使用Java代码关闭Windows操作系统

时间:2011-11-19 09:49:46

标签: java

我尝试使用以下Java代码来关闭Windows操作系统。我正在使用 Microsoft Windows XP Professional版本2002,Service Pack 3与Intel(R)Core(TM)i3 CPU ,使用Netbeans IDE 6.9.1。

package shutdownos;

import java.io.IOException;

final public class Main
{
    public static void main(String... args) throws 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);
    }
}

它在Java中抛出以下异常。

Exception in thread "main" java.lang.IllegalArgumentException: Empty command

上述代码中的以下行发生异常。

Runtime.getRuntime().exec(shutdownCommand);

main()方法中的倒数第二个。这段代码有什么问题?

6 个答案:

答案 0 :(得分:5)

您正在寻找os.name的错误值 - 无论它是什么,它都不是“Windows”,因此代码会在变量else所在的shudowncommand块中运行保留为空字符串,导致“空命令”异常。执行System.out.println(operatingSystem)以查看应检查的值,而不是“Windows”。

它可能类似于“Windows NT”,因此如果您用.equals()支票替换.startsWith()支票,则应设置。

答案 1 :(得分:4)

根据this页面,您似乎对O / S名称使用了错误的值。如果是这种情况,您的shutdownCommand字符串将保持为空,这将导致您的程序传递一个空命令,该命令符合您获得的异常。

答案 2 :(得分:3)

程序正在跳过if语句,os.name不会只是Windows,它会是我认为Windows XP或更多,所以用

替换它
else if (operatingSystem.startsWith("Windows")){

 }

答案 3 :(得分:3)

没有属性“os.name”等于“Windows”。您是否要检查该属性是否包含“Windows”?据我所知,所有的窗口名称都有一个量词,如“Windows 95”,“Windows NT”等。

答案 4 :(得分:1)

windows os的shutdown命令应为shutdown -s -t 0。试试这个。

答案 5 :(得分:1)

我主要使用此网站查找可能的值:What os or arch value can I use?

正如其他人所说,你应该使用String.startsWith()方法。