• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

nio and getRuntime()?

 
Mr.David Shapiro
Ranch Hand
Posts: 54
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Does anybody have an example of using nio channels or bytebuffers to read stdout/stderr of a command run with getRuntime?
 
Jim Yingst
Wanderer
Sheriff
Posts: 18671
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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:
 
Campbell Ritchie
Sheriff
Pie
Posts: 50196
79
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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.

See whether that lot helps.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic