Another Way to Execute a Process Without a Hang

This is in response to the tip Execute a Process Without a Hang. When I need to stdin, stdout and stderr at the same time, I use different threads to handle them.Here’s the code:

    final Process p = Runtime.getRuntime().exec("/usr/bin/abc");    Thread perr = new Thread() {            public void run() {                     BufferedReader din = new BufferedReader(new InputStreamReader(p.getErrorStream()));                     String s;                     try {                             while ( (s = din.readLine()) != null ) {                                     System.err.println("err stream: "+s);                            }                             din.close();                    }                      catch (IOException e ) { }             }    };    final Writer jspOut = out;    Thread pout = new Thread() {            public void run() {                     BufferedReader din = new BufferedReader(new InputStreamReader(p.getInputStream()));                     String s;                     try {                             while ( (s = din.readLine()) != null ) {                                     jspOut.write(s);                                    jspOut.write("
"); jspOut.flush(); } din.close(); } catch (IOException e ) { } } }; perr.start(); pout.start(); final BufferedReader urlBR = new BufferedReader(new InputStreamReader(new URL(url).openStream())); final Writer pWriter = new BufferedWriter(new OutputStreamWriter(p.getOutputStream())); String line = ""; while((line = urlBR.readLine()) != null) { pWriter.write(line); pWriter.write(" "); pWriter.flush(); } urlBR.close(); pWriter.close(); p.waitFor();
Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: