Questions on Runtime.getRuntime()

Guys couple of quick questions on Runtime.getRuntime()

First question ... waitFor?  Is it onyl used for cleanup?  If not for what?
exitCode = p.waitFor();  abnormal termations?


Second question if I want to obtain the output from running an application this way
I know I get via  InputStreamReader and BufferedReader if I was to loop
through the BufferedReader response

while ( (line = br.readLine()) != null)
{
             response=response+line;
}

it would give me all output from the program correct?  (Assuming no abnormal terminations


public static boolean executeObject(byte[] bs)
      {
            boolean resultcode = false;
            String programdir="";
            String programName="";
            String response="";

            
            
            String[] command = new String[2];
            
            
            
            try
            {
                  programdir="D:/ryno71;
                  programName="ryno71.exe";
            } catch (Exception e1)
            {
                  // TODO Auto-generated catch block
                  e1.printStackTrace();
            }
            
            command[0] = programdir+programName;
            String byte_to_string= new String(bs, 0, bs.length);

            command[1] = byte_to_string;  //put what I am executing with ryno71.exe
            //cmd[2] = "param2";
            
            InputStreamReader isr=null;
            BufferedReader br = null;
            try
            {
                  Runtime program = Runtime.getRuntime();
                  Process p = program.exec(command);
                  InputStream stdin = p.getInputStream();
                  
                  
                  
                  
                  try
                  {
                        
                        isr = new InputStreamReader(stdin);
                  }
                  
                  finally
                  {
                        try
                        {
                              if (isr != null) isr.close();
                        }
                        catch(IOException ie)
                        {
                              
                              ie.printStackTrace();
                              
                        };
                        
                        
                  }
                  
                  try
                  {
                        
                        br = new BufferedReader(isr);
                  }
                  
                  finally
                  {
                        
                        try
                        {
                              if (br != null) br.close();
                        }
                        catch(IOException e)
                        {
                              e.printStackTrace();
                              
                        };
                        
                  }
                  
                  String line=null;
                  while ( (line = br.readLine()) != null)
                  {
                                                  response=response+line;
                                                }
                                                //System.out.println(line);
                  
                  //write abnormal out somewhere here.
                  
                  
                  int exitCode = 0;
                  try
                  {
                  exitCode = p.waitFor();  
                                                /*exitCode <= used for errors if you dont want to
                                                     use a separate thread for Process.getErrorStream ?
                                                    Whats waitFor used for????
                                                 */

                  } catch (InterruptedException e)
                  {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                  }
                  if (exitCode != 0)
                  {
                        resultcode=false;
//                        
                        e1.printStackTrace();
                  }
                                                else
                                                {
                                                          resultcode=true;
                                                }

                  
            } catch (IOException e)
            {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }
            
            
            return resultcode;
      }

As always thanks for the input
ryno71Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
CEHJConnect With a Mentor Commented:
>>exitCode = p.waitFor();  abnormal termations?

Normal *and* abnormal

>>it would give me all output from the program correct?

You need to treat the streams on separate threads. See

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
0
 
ryno71Author Commented:
Thanks for the quick response.  If I am limited in opening additional new threads... (not allowed to open additional threads) what I have would work for normal output, correct?
0
 
CEHJCommented:
It's difficult to say whether it would work. Try it out
0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

 
ryno71Author Commented:
Would I run into issues if I don't pay attention to the ErrorStream and only worry about the InputStream?
0
 
CEHJCommented:
Again it's difficult to say
0
 
ryno71Author Commented:
thanks nothing abnormal, but might see something if I am playing with large amounts of data.

Have a nice weekend

ryno71
0
 
CEHJCommented:
:-)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.