Java cmd shutdown CreateProcess错误=2

Java cmd shutdown CreateProcess错误=2,java,cmd,Java,Cmd,我最近试图用java中的cmd命令重新启动/关闭电脑,但得到了createprocesserror=2。 我使用的是StringBuilder,因为我需要在cmd命令中使用“” public class CMDTest { public static void main(String[] args) throws IOException { startCmd(); } public static void startCmd() throws IOExce

我最近试图用java中的cmd命令重新启动/关闭电脑,但得到了
createprocesserror=2
。 我使用的是StringBuilder,因为我需要在cmd命令中使用

public class CMDTest {
    public static void main(String[] args) throws IOException {
        startCmd();
    }

    public static void startCmd() throws IOException {
        String a = "shutdown -s -t 120 -c ";
        String b = "\"Your computer will restart. Cause something .\"";
        String g = "";

        StringBuilder sbuilder = new StringBuilder();
        sbuilder.append(a);
        sbuilder.append(b);
        String finall = sbuilder.toString(); 
        System.out.println(finall);

        Runtime.getRuntime().exec(new String[]{finall, g});
        System.out.println(g);

        Process p = Runtime.getRuntime().exec(new String[]{finall, g});
        InputStream s = p.getInputStream();

        BufferedReader in = new BufferedReader(new InputStreamReader(s));
        String t;

        while ((t = in.readLine()) != null) {
            System.out.println(t);
        }
    }
}

您只需要以下代码:

String command = "shutdown -s -t 120 -c \"Your computer will restart. Cause something.\"";
Runtime.getRuntime().exec(command);
至少在Windows系统上工作得很好

代码不工作的原因是
新字符串[]{finall,g}
。如果传递数组,它将使用第一个索引作为命令,其他索引作为参数。这将导致以下情况:

Command: shutdown -s -t 120 -c
Parameter: \"Your computer will restart. Cause something.\"
相反,如果传递字符串,则会发生以下情况:

Command: shutdown
Parameters: -s, -t, 120, -c, \"Your computer will restart. Cause something.\"

只有第二个命令可以找到,只有独立的shutdown命令存在。

Use
ProcessBuilder
更具可配置性,您还可能会发现,使用
exec(新字符串[]{finall,g})
时,操作系统实际上正在寻找命令
shutdown-s-t 120-c“您的计算机将重新启动。导致某些问题。”
我相信你会同意,这是不存在的。每个命令和参数都应该是
字符串[]中自己的元素。
谢谢!它现在起作用了,我已经试过了,但是给出了错误的参数,谢谢你的解释!