Solved

Questions on Runtime.getRuntime()

Posted on 2006-06-30
7
207 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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

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

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

For customizing the look of your lightweight component and making it look opaque like it was made of plastic.  This tip assumes your component to be of rectangular shape and completely opaque.   (CODE)
After being asked a question last year, I went into one of my moods where I did some research and code just for the fun and learning of it all.  Subsequently, from this journey, I put together this article on "Range Searching Using Visual Basic.NET …
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:

708 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

20 Experts available now in Live!

Get 1:1 Help Now