正如我在评论中所说,你可能会听到InputStream直到“按任意键”.然后你应该通过OutputStream写一个newLine到进程.以下是一些可以帮助您的代码:
public class BatchEnter {
public static void main(String[] args) throws Exception {
List params = Arrays.asList(new String[] { "cmd", "/C", "C:/test/test.bat" });
ProcessBuilder builder = new ProcessBuilder(params);
builder.directory(new File("C:/test")).redirectErrorStream(true);
final Process p = builder.start();
final BufferedReader wr = new BufferedReader(new InputStreamReader(p.getInputStream()));
final BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(p.getOutputStream()));
String line = "";
try {
while ((line = wr.readLine()) != null) {
if (line.equals("Press any key")) {
String newLine = "\n\r";
writer.write(newLine);
}
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
p.waitFor();
}
}
关于代码的一些评论:
>您应该更改异常管理原因我只是在做e.printStackTrace()
>我的进程是一个命令窗口,我不知道它是否适用于您的exe
编辑:
如果您没有获得任何输出,您只需尝试发送newLine提要,直到程序结束.你可以为exemample,每秒写一次newLine,直到进程停止.就像是 :
final BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(p.getOutputStream()));
while(true){
String newLine = "\n\r";
writer.write(newLine);
}
您可以启动一个写入进程的线程,并在p.waitFor()返回时停止它.你也应该改变条件,比如每秒钟或线程没有停止时更干净的东西.请注意,如果您正在写入流并且流程完成,您将具有IOException.这真的不是我会依赖的东西,但如果它可以帮助你.