有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ProcessBuilder在前台运行进程

<>我想运行C++中的一个可执行文件,并在前台看到与它相关的CMD提示,因为可执行文件在CMD中打印了一些行。p>

我已经编写了以下代码,但是所有进程都是在后台创建和运行的(在这段代码中,我打开了伪cmd.exe进程,而不是我的进程)

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

如何启用进程的前台运行

谢谢


共 (2) 个答案

  1. # 1 楼答案

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

    但以防万一,你真的希望命令窗口出现。执行cmd。获取进程“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();
    

    无论如何,通常也应该耗尽输入流

  2. # 2 楼答案

    问题不在于进程是在前台还是后台。当您使用Java启动一个流程时,您必须使用Java来控制该流程的生命周期。JavaAPI为您提供了对流程的各种属性的访问。这里您感兴趣的是过程的输出。它由进程“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);
    

    当然,这段代码假设您的进程没有等待任何输入,即它不是交互式的