Java ProcessBuilder关闭系统错误

Java ProcessBuilder关闭系统错误,java,processbuilder,Java,Processbuilder,当我尝试获取inputstream并运行该代码块时,系统将进入一个无限循环。 然后我改变了代码,如上图所示。但是,当我运行它时,它的退出值为1,无法关闭系统 有什么想法吗 PS:我不想使用java运行时。试试: ProcessBuilder pb; Process process; String command ="shutdown -s"; try { pb = new ProcessBuilder("cmd.exe", "/C", command)

当我尝试获取inputstream并运行该代码块时,系统将进入一个无限循环。 然后我改变了代码,如上图所示。但是,当我运行它时,它的退出值为1,无法关闭系统

有什么想法吗

PS:我不想使用java运行时。

试试:

 ProcessBuilder pb;
 Process process;
 String command ="shutdown -s";
    try {
        pb = new ProcessBuilder("cmd.exe", "/C", command) 
        process = pb.start();
        process.waitFor();
        if (process.exitValue() == 0) {                  
            //success
        } else {
            //handle error
        }
    } catch (Exception e) {
        //handle error
    }
构造函数ProcessBuilder的参数命令(字符串…命令)作为1个参数传递给可执行文件,这允许参数中有空格

您执行命令的方式与

cmd/C“关机-s”

因此,“shutdown-s”被解释为单个参数。

命令应为:

pb = new ProcessBuilder("cmd.exe", "/C", "shutown", "-s");
而不是:

String command ="shutdown.exe -s";

我的其他命令可以工作,即使我没有单独传递它们的参数?我只是直接在cmd中做了一些测试。。。它似乎在双引号中拆分参数。i、 e
cmd>cmd/C“foo.exe arg1 arg2”
被解释为
cmd>cmd/C“foo.exe”“arg1”“arg2”
cmd>cmd/C“foo.exe”“arg1 arg2”“
相当于
cmd>cmd/C foo.exe”“arg1 arg2”
witch是一种奇怪的行为,因为如果想将
arg1 agr2
解释为包含空格字符的单个参数,他会直观地编写
cmd>cmd/C“foo.exe\“arg1 arg2\”
String command ="shutdown -s";