Dav*_*son 6 java processbuilder
我正在使用Java的ProcessBuilder来启动子进程,这是另一个必须在单独的JVM中运行的Java程序.
我启动两个Threads来从Process读取stdout和stderr流,这样如果流缓冲区已满,就没有挂起.对Process.waitFor的调用返回但流不会终止.
我使用的代码看起来像(命令是字符串列表):
ProcessBuilder pb = new ProcessBuilder(command);
final Process p = pb.start();
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
final ByteArrayOutputStream errStream = new ByteArrayOutputStream();
Thread outputThread = new Thread() {
@Override
public void run() {
try {
IOUtils.copy(p.getInputStream(), outStream);
} catch (IOException e) {
e.printStackTrace();
}
};
};
outputThread.start();
Thread errorThread = new Thread() {
@Override
public void run() {
try {
IOUtils.copy(p.getErrorStream(), errStream);
} catch (IOException e) {
e.printStackTrace();
}
};
};
errorThread.start();
int returncode = p.waitFor();
outputThread.join();
errorThread.join();
Run Code Online (Sandbox Code Playgroud)
如果我运行其他东西,例如"java -version"或"dir"或其他东西,代码工作正常.我可以访问我试图运行的Java代码,但我从未听说过你应该在System.out上调用close().