简体   繁体   中英

executing a java program in another java program using Runtime.exec() function

The following code snippet i had given is using exec function and executes hello program (simple "hello world" printing java program). But as soon as i execute the main program, print statement of instream.readline() simply returns NULL . Please try to sort out the problem. Hope the explanation is clear.

CODE:

Process process2=null;
BufferedReader inStream=null; 
try
{
    process2 = Runtime.getRuntime().exec("java hello");
}
catch(IOException e1)
{
    System.err.println("Error on exec method");
    e1.printStackTrace();  
}
try
{
    inStream = new BufferedReader(new  InputStreamReader(process2.getInputStream() ));  
    System.out.println(inStream.readLine());
}
catch(IOException e1)
{
    System.err.println("Error on inStream.readLine()");
    e1.printStackTrace();  
} 

First of all your hello.java should be already compiled n the class file should present in the current directory where the program is located.

And for getting errors, you can get error stream from process class's object.

BufferedReader stdError = new BufferedReader(new InputStreamReader(pr.getErrorStream()));

String s="";
while ((s = stdError.readLine()) != null) 
System.out.println(s);

Working with Eclipse/java7/windows

import java.io.BufferedReader;
import java.io.InputStreamReader;


public class ProcessDemo {

    public static void main(String[] args) throws Exception {

        final String dir = System.getProperty("user.dir");
        System.out.println("current dir = " + dir);

        Runtime run = Runtime.getRuntime();
        Process pr=run.exec("javac -d "+ dir +"\\src "+ dir+"\\src\\HelloDemo.java");

        pr.waitFor();

        BufferedReader stdError = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
        BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));

        String line = "";
        String s;

        // read any errors from the attempted command
        System.out.println("Here is the standard error of the command (if any):\n");
                   while ((s = stdError.readLine()) != null) 
                        System.out.println(s);

        //read output
        while ((line=buf.readLine()) != null)
            System.out.println(line);

        pr.destroy();

        Runtime run1 = Runtime.getRuntime();
        Process pr1=run1.exec("java -cp "+dir+"\\src HelloDemo");

        BufferedReader stdError1 = new BufferedReader(new InputStreamReader(pr1.getErrorStream()));
        BufferedReader buf1 = new BufferedReader(new InputStreamReader(pr1.getInputStream()));


        //interpretting file n executing it line by line :D :P

        pr1.waitFor();

        String temp;
        // read any errors from the attempted command
        System.out.println("\n\nHere is the standard error of the command (if any):\n");
                   while ((temp = stdError1.readLine()) != null) 
                        System.out.println(temp);

        //read output
        System.out.println(buf1.readLine());
        while ((temp=buf1.readLine()) != null)
            System.out.println(temp);


    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM