【发布时间】:2013-09-19 14:40:55
【问题描述】:
在 java 中,我试图读取我用 C 编写的控制台程序的输出。 该程序使用 printf() 不断地将其当前进度打印到标准输出中。 如果我在控制台中运行该程序,一切都很好,我看到了输出。 我现在正在尝试从 java 内部运行它,它也运行良好,进程正在启动和计算,但是整个输出将立即以大块的形式读取(几秒钟内没有输出,然后一切都立即出现)。
我假设中间有某种必须填充的缓冲区。
为了绘制进度条并使用程序正在打印的其他参数,需要流畅地从标准输出中读取,而不是一次读取所有内容。
我已经在 Problem reading InputStream from Java Process (Runtime.getRuntime().exec() or ProcessBuilder) 之类的问题中读到了这一点,但这对我没有多大帮助,因为我遵循了这些问题中的提示。
下面是我目前尝试使用的代码。
public static void main(String[] args)
{
ProcessBuilder builder = new ProcessBuilder("render.exe", "1920", "1080", "10000", "0", "0", "1", "6", "test.png");
try
{
final Process proc = builder.start();
final Thread io = new Thread()
{
@Override
public void run()
{
final InputStream read = proc.getInputStream();
int c;
try
{
while((c = read.read()) != -1)
System.out.print((char)c);
}
catch (IOException e)
{
e.printStackTrace();
}
}
};
io.start();
proc.waitFor();
}
catch (IOException | InterruptedException e)
{
e.printStackTrace();
}
}
【问题讨论】:
标签: java process inputstream