That's right.
System.setOut(OutputStream) only assigns some OutputStream object to the
System.out field, so any Java code using System.out to retrieve the
OutputStream will use the newly set OuputStream.
ProcessBuilder.Redirect.INHERIT on the other hand, tells ProcessBuilder
where to redirect the standard output of the subprocess when it is
started. This has nothing to do with System.out field except that by
default the field holds an OutputStream object that outputs to the
standard output of the java process and that is also where
ProcessBuilder.Redirect.INHERIT instructs ProcessBuilder to redirect the
output of the started subprocess (inherits the output of the java
process). In other words: the "target" of the default System.out and
subprocess redirected output when using ProcessBuilder.Redirect.INHERIT
is the same. When you change System.out, you change it's target, but
that doesn't change where ProcessBuilder.Redirect.INHERIT redirects to.
Regards, Peter
On 05/28/2015 12:48 PM, Dawid Weiss wrote:
Your code makes the native app inherit native stdout/err process
descriptors, you need to pipe the output from your native app to Java
and then redirect the output to wherever you wish (byte array for
example).
In other words, Redirect.PIPE + pipe code.
Dawid
On Thu, May 28, 2015 at 12:43 PM, Weijun Wang <weijun.w...@oracle.com> wrote:
I am writing something like this
ByteArrayOutputStream bout = new ByteArrayOutputStream();
System.setOut(out);
System.out.println("Hello");
ProcessBuilder pb1 = new ProcessBuilder("./native-app");
pb1.redirectOutput(ProcessBuilder.Redirect.INHERIT);
pb1.start();
Now "Hello" no longer shows on screen, but the output of "native-app" still
shows up there. What else shall I do?
This is Ubuntu 14.04.2.
Thanks
Max