Java ProcessBulder加载进程,但不加载';不要启动它

Java ProcessBulder加载进程,但不加载';不要启动它,java,processbuilder,Java,Processbuilder,我使用ProcessBuilder从java应用程序(主机)启动一个新进程(子进程)。大概是这样的: ProcessBuilder processBuilder = createProcess(commandLine); processBuilder.directory(new File(baseDir)); processBuilder.redirectErrorStream(true); Process process = null; try { process = processB

我使用ProcessBuilder从java应用程序(主机)启动一个新进程(子进程)。大概是这样的:

ProcessBuilder processBuilder = createProcess(commandLine);
processBuilder.directory(new File(baseDir));
processBuilder.redirectErrorStream(true);
Process process = null;
try {
    process = processBuilder.start();
} catch (Exception e) {
    e.printStackTrace();
}
        process = processBuilder.start();
        InputStream is = process.getInputStream();
        INputStreamReadr isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while (!stopProcess) {
            if (br.ready()) {
                line = br.readLine();
                System.out.println(line);
            }
        }
我确实在系统监视器中看到子进程已启动,但除非我停止主机应用程序,否则它将无法运行。更具体地说,子进程是一个服务器,在使用ProcessBuilder启动它之后,如果主机应用程序仍在运行,则它不会响应请求。此外,服务器正在使用的端口仍然可用。如果我停止主机应用程序,服务器将立即开始工作。是否有我遗漏的内容,或者ProcessBuilder就是这样工作的?
非常感谢

在大多数情况下,除非进程的标准输出缓冲区被清空,否则它不会终止。可能是您的进程已填充此缓冲区并已停止(出于某种原因)

尝试使用标准的进程(通过
进程#getInputStream
),看看这是否有区别

也可能是进程正在等待用户的输入


请看一个例子

@MadProgrammer是正确的。我能够解决这个问题,我想用一个代码示例来回答我的问题。这对其他人也有好处。 您需要在启动子进程之后使用该标准。大概是这样的:

ProcessBuilder processBuilder = createProcess(commandLine);
processBuilder.directory(new File(baseDir));
processBuilder.redirectErrorStream(true);
Process process = null;
try {
    process = processBuilder.start();
} catch (Exception e) {
    e.printStackTrace();
}
        process = processBuilder.start();
        InputStream is = process.getInputStream();
        INputStreamReadr isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while (!stopProcess) {
            if (br.ready()) {
                line = br.readLine();
                System.out.println(line);
            }
        }

谢谢@MadProgrammer!你的回答是正确的。当我使用子进程的InputStream时,它开始工作。类似这样的粗体'process=processBuilder.start();is=process.getInputStream();isr=新的InputStreamReader(is);br=新的缓冲读取器(isr);弦线;而(!stopProcess){if(br.ready()){line=br.readLine();System.out.println(line);}}}可能重复的