views:

126

answers:

3
  import java.lang.Process;    
  import java.io.*;   
  import java.io.InputStream;    
  import java.io.IOException;    
  public class prgms{    
  public static void main(String[] args) {    
    try {    
      // Execute a command without arguments    
      String command = "java JavaSimpleDateFormatExample";    
      Process child = Runtime.getRuntime().exec(command);    

      // Execute a command with an argument    
      // command = "java JavaStringBufferAppendExample";    
     //child = Runtime.getRuntime().exec(command);    
    } catch (IOException e) {    
    }    
    InputStream in = child.getInputStream();    
    int c;    
    while ((c = in.read()) != -1) {    
        process((char)c);    
    }    
    in.close();    
  }    
}    

I have modified this way... but the following error occurs,

prgms.java:17: cannot find symbol    
symbol  : variable child    
location: class prgms     
InputStream in = child.getInputStream();    
                 ^
prgms.java:20: cannot find symbol    
symbol  : method process(char)    
location: class prgms    
        process((char)c);    
        ^    
2 errors   
+8  A: 

You're indeed ignoring the stdout and stderr streams of the Process returned by Runtime#exec().

This is going to be a long story, so here's just a link: When Runtime.exec won't. Read all the four pages.

BalusC
Thanks BalusC for the link!
peakit
Thanks :) Anyhow i could not reach the solution.. :(
LGAP
That was quick. Did you read all the 4 pages? What do you have as far now and what happens now?
BalusC
+4  A: 

There is no problem with that code.

What is does, is to execute another Java program inside.

The class Process has a method to get the output of the program, you have to redirect that output to your own, if you want to see the result.

Here's a sample using a "modern" alternative to Runtime.exec

// Hello.java says Hello to the argument received.
class Hello {
    public static void main ( String [] args ) {
         System.out.println( "Hello, "+args[ 0 ] );
    }
}

// CallHello.java 
// Invokes Hello from within this java program 
// passing "world"  as argument.
import java.io.InputStream;
import java.io.IOException;
public class CallHello {
    public static void main( String [] args ) throws IOException {
         Process child = new ProcessBuilder("java", "Hello", "world").start(); 
         // read byte by byte the output of that progam.
         InputStream in = child.getInputStream();
         int c = 0;
         while( ( c = in.read() ) != -1 ) {
            // and print it
            System.out.print( (char)c);
         }
     }
}

Output:

Hello world
OscarRyz
+2  A: 

Child is declared inside the try...catch block so its scope is local to that block. You're trying to access it outside of the block. You should declare it before the block, something like

Process child;
try {
// code
child = Runtime.getRuntime().exec(command);
// code
}
catch(/*blah blah*/) {}
// more code
Alex Zylman