Java で、C で記述したコンソール プログラムからの出力を読み込もうとしています。このプログラムは、printf() を使用して現在の進行状況を stdout に継続的に出力しています。そのプログラムをコンソールで実行すると、すべて問題なく、出力が表示されます。私は今、Java内から実行しようとしていますが、これも正常に実行され、プロセスが開始され計算されていますが、出力全体が一度に巨大なブロックで読み取られます(数秒間出力がなく、すべてが一度に表示されます) )。
その間に、埋めなければならないある種のバッファがあると思います。
プログレスバーを描画し、プログラムが印刷している他のパラメーターを操作するには、すべてを一度にではなく、標準出力から流動的に読み取る必要があります。
Java プロセスからの InputStream の読み取りに関する問題 (Runtime.getRuntime().exec() または 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();
}
}