Solved

Questions on Runtime.getRuntime()

Posted on 2006-06-30
7
208 Views
Last Modified: 2010-03-31
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
0
Comment
Question by:ryno71
  • 4
  • 3
7 Comments
 
LVL 86

Accepted Solution

by:
CEHJ earned 125 total points
ID: 17018328
>>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
 

Author Comment

by:ryno71
ID: 17018483
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
 
LVL 86

Expert Comment

by:CEHJ
ID: 17018498
It's difficult to say whether it would work. Try it out
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:ryno71
ID: 17018507
Would I run into issues if I don't pay attention to the ErrorStream and only worry about the InputStream?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 17018518
Again it's difficult to say
0
 

Author Comment

by:ryno71
ID: 17019824
thanks nothing abnormal, but might see something if I am playing with large amounts of data.

Have a nice weekend

ryno71
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 17019837
:-)
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now