Well, Runtime (or rather, Process) doesn't have any special hook for NIO, so you'd have to use the InputStreams and put wrappers around them:

What you do with them after that is up to you - they work like other NIO classes, if you have examples of those. As usual for a Process, you should probably read the two channels in separate threads. Or you could use a ProcessBuilder instead, and set it up to send both standard out and error out to the same stream:

I had a similar problem using Runtime.exec() to compile a .c file with gcc. This is what I tried:-You have to make sure to empty both Streams quickly, otherwise there is a risk of deadlock. I took all the output from the two Streams from the process, and used separate Threads to put the output into List<String> objects. Because this takes longer than the myProcess.waitFor() call, I introduced a 1-second delay with Thread.sleep(). After that, one can simply print the contents of the two Lists. You will find a reference to an article from about 6� years ago in one of the documentation comments.