Java cmd shutdown CreateProcess错误=2
我最近试图用java中的cmd命令重新启动/关闭电脑,但得到了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
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“您的计算机将重新启动。导致某些问题。”
我相信你会同意,这是不存在的。每个命令和参数都应该是字符串[]中自己的元素。
谢谢!它现在起作用了,我已经试过了,但是给出了错误的参数,谢谢你的解释!