ProcessBuilder在前台运行进程

时间:2013-06-30 18:29:23

标签: java

我想运行一个用C ++编写的可执行文件,并在前台看到与它关联的cmd promt,因为可执行文件在cmd中打印了一些行。

我编写了以下代码,但所有进程都是在后台创建并运行的(在此代码中我打开了虚拟cmd.exe进程,而不是我的进程)。

Process p = new ProcessBuilder("C:\\Windows\\System32\\cmd.exe").start();

如何启用进程的前台运行?

谢谢!

2 个答案:

答案 0 :(得分:3)

问题不在于流程是在前台还是在后台。当您使用Java启动进程时,必须使用Java来控制该进程的生命周期。 Java API使您可以访问该过程的各种属性。你在这里感兴趣的是这个过程的输出。这由流程'InputStream表示。这似乎违反直觉,但这是有道理的,因为从Java程序的角度来看,进程的输出是程序的输入。相反,如果您需要向流程发送数据,请写入流程“OutputStream

总而言之,访问进程“InputStream并将其打印到命令行:

Process process = new ProcessBuilder("C:\\Path\\To\\My\\Application.exe").start();

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

StringBuilder output = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    output.append(line);
}

System.out.println(line);

当然,这段代码假定您的流程不等待任何输入,即它不是交互式的。

答案 1 :(得分:0)

Vivin Paliath的答案真的是要走的路,然后你可以用输出做任何你想做的事情,在你自己的对话中显示,记录,解释,检查错误等等。

但是,万一你真的想要出现这个命令窗口。执行cmd.exe并获取进程“OutputStream”并将命令(application.exe)写入以新行结尾的命令。

有些事情:

Process p = new ProcessBuilder("C:\\Windows\\System32\\cmd.exe").start();
out = p.getOutputStream();
out.write("path\\application.exe\r\n".getBytes());
out.flush();

无论如何,通常也应该排出输入流。