我已将exe程序放置在共享位置。它在开始时不需要任何参数。当它在命令窗口中启动时,它会显示一个帮助菜单,其中包含可以执行的命令列表,并以期望输入命令的>
结束。我需要从该列表执行一个名为TRIGGER
的特定命令。到目前为止,这是我的,但它完全失败。它既不显示流程的输出,也不显示流中的输入命令trigger
。无法使用java将命令写入共享位置上的exe程序
public void execute(){
String cmd = "\\\\sharedLocation\\server\\adm.exe";
p = Runtime.getRuntime().exec(cmd);
InputStream in = p.getInputStream();
OutputStream out = p.getOutputStream();
BufferedReader br= new BufferedReader(new InputStreamReader(in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
bw.write("TRIGGER");
bw.flush();
String output = "";
while (!output.endsWith(">")) {
System.out.println("in loop");
output = output + br.readLine();
}
System.out.println("Out"+output);
out.close();
p.waitFor();
}
编辑:adm.exe由该程序启动,但似乎adm.exe是阻塞进程。它无法打印“in loop”语句。然而,当我打开Windows任务管理器和杀adm.exe进程树,这显示出控制台
in loopnull
in loopnullnull
in loopnullnullnull
in loopnullnullnullnull
in loopnullnullnullnullnull
in loopnullnullnullnullnullnull
in loopnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull
in loopnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull
Outnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull
您需要阅读的字符不要你的问题运行呢? (in.read()...) – helios 2012-07-23 11:26:43
明确'flush' bw。否则它会缓冲'TRIGGER'。实际上,我不应该使用BufferedWriter。只是OSWriter。 – helios 2012-07-23 11:31:22