我使用以下对象,通过我的Java代码运行bash命令。
public class Scripter {
private final String[] ENV = {"PATH=/bin:/usr/bin/"};
private String cmd;
private Process process;
public Scripter(String cmd) throws IOException {
this.cmd = cmd;
process = Runtime.getRuntime().exec(cmd, ENV);
}
}
现在我调用此对象并尝试在此函数中打印输出。
public static void main(String[] args) {
Scripter gitCheck;
try {
gitCheck = new Scripter("git --version");
} catch (IOException e) {
e.printStackTrace();
}
Scanner sc = new Scanner(System.in);
if (sc.hasNext()) {
System.out.println(sc.next());
}
}
程序无限循环,什么都不做。我在这里做错了什么?
答案 0 :(得分:3)
您正在尝试从Java进程的标准输入中读取字符串:
Scanner sc = new Scanner(System.in);
if (sc.hasNext()) { ... }
因此,您的Java程序将阻塞,直到您实际将某些内容传递到其标准输入或关闭标准输入。
(这不是一个无限循环,它与git命令无关)
如果您正在尝试阅读git命令的输出,则需要阅读process.getInputStream()
而不是System.in
。