使用的IDE:IntelliJ系统操作系统:Windows尝试过的命令:ProcessBuilder,Runtime.exec()
我正在执行Main.java文件(如下所述)。它在终端中执行完美,但是在IntelliJ中,它引发以下错误。 ProcessBuilder和Runtime.exec()也会发生相同的情况。
"C:\Program Files\Java\jdk1.8.0_241\bin\java.exe"
Exception in thread "main" java.io.IOException: Cannot run program "echo": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at TestSample.Main.main(Main.java:24)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:444)
at java.lang.ProcessImpl.start(ProcessImpl.java:140)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 1 more
Process finished with exit code 1
为什么会发生?有人可以帮我解决这个问题吗?
Main.java public static void main(String[] args) throws InterruptedException,IOException{
ProcessBuilder builder = new ProcessBuilder("echo", "This is ProcessBuilder Example");
Process p=builder.start();
int errcode = p.waitFor();
System.out.println("Program is executed successfully?"+(errcode == 0 ?"No":"Yes"));
System.out.println("Echo Output:\n" + output(p.getInputStream()));
}
private static String output(InputStream inputStream) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + System.getProperty("line.separator"));
}
} finally {
br.close();
}
return sb.toString();
}
此代码是从https://examples.javacodegeeks.com/core-java/lang/processbuilder/java-lang-processbuilder-example/中检索的
echo
不是有效的可执行文件,而是命令行外壳程序(cmd.exe
)提供的命令。
为了从其他进程运行此命令,您必须启动cmd.exe
并将参数传递给它。
Windows的工作代码如下:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "echo", "This is ProcessBuilder Example from JCG");
对于其他操作系统,您需要将cmd.exe
替换为/bin/bash
,等等。>