我尝试使用以下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()方法中的倒数第二个。这段代码有什么问题?
答案 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()方法。