Printing a Java InputStream from a Process

inputstream, java, printing

Solution

Processing the output stream of the process in a separate thread might help here. You also want to explicitly wait for the process to end before continuing with your logic:

ProcessBuilder builder = new ProcessBuilder("java",
        textFieldMemory.getText(), "-jar", myJar);
final Process process = builder.start();
final Thread ioThread = new Thread() {
    @Override
    public void run() {
        try {
            final BufferedReader reader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (final Exception e) {
            e.printStackTrace();
        }
    }
};
ioThread.start();

process.waitFor();

Problem

`UPDATE: I found a crucial part to why this probably isn't working! I used System.setOut(out); where out is a special PrintStream to a JTextArea` This is the code, but the issue I'm having is that the information is only printed out once I end the process. ``` public Constructor() { main(); } private void main() { btnStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { ProcessBuilder builder = new ProcessBuilder("java", textFieldMemory.getText(), "-jar", myJar); Process process = builder.start(); InputStream inputStream = process.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream), 1); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } inputStream.close(); bufferedReader.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } }); } ``` Current output: ``` Line 1 Line 2 Line 3 Line 4 Line 5 ``` This is the correct output, but it is only being printed as one big block when I end the process. Does anyone know what the issue is? If so can you help explain to me why this is happening, thank-you in advance.

Original source