I have a problem with an interactive process in Java. I have threads to read STDOUT and STDERR and a thread to handle input for the process. But there are no data available within the STDOUT stream until the process has terminated. Then is the entire output printed at once.
DBG | Pipe action-STDERR started
DBG | Pipe action-STDIN started
DBG | Pipe action-STDOUT started
STDIN | Try to put some input.
STDIN | I cannot see any output.
STDIN | Nevertheless the interaction works.
STDIN | It works on background.
STDIN | Let's terminate the process to see the truth.
STDIN | quit
STDOUT | Enter some text, please: The text is 'Try to put some input.'
STDOUT | Enter some text, please: The text is 'I cannot see any output.'
STDOUT | Enter some text, please: The text is 'Nevertheless the'
STDOUT | Enter some text, please: The text is 'interaction works.'
STDOUT | Enter some text, please: The text is 'It works on background.'
STDOUT | Enter some text, please: The text is 'Let's terminate the process to see the truth.'
STDOUT | Enter some text, please: The text is 'quit'
STDOUT | Bye!
DBG | Trying to kill thread action-STDOUT
DBG | Trying to kill thread action-STDERR
DBG | Trying to kill thread action-STDIN
DBG | Pipe action-STDERR finished
DBG | Finished
DBG | Pipe action-STDIN finished
DBG | Pipe action-STDOUT finished
The lines prefixed with STDOUT are lines written by the process. The lines prefixed with STDIN are lines written by me. Lines prefixed by DBG are lines written by the tested Java program as debug information. Let's try to execute the same process in system console.
Enter some text, please: Text
The text is 'Text'
Enter some text, please: quit
The text is 'quit'
Bye!
The behavior fullfits my expectation. I'm asked for some input. I do it and get the answer.
I'm surprissed, that I've found several posts on web including Stackoverflow, but without any answer marked as acceptable solution. (For example Problem reading InputStream from Java Process.) It seems Java developers haven't ever been dealing with execution of an interactive process. Strange is, that output of non-interactive process (as ping) is appearing sequentially, while the process is running. Without any problem. But when the process is waiting for user input, the output is somehow blocked.