Getting input and output from a jar file run from java class?

13,896

Solution 1

Using Runtime.exec is platform dependent.

If you're using windows try prepending:

cmd /c

to

java -jar .... etc. et

Something like:

...getRuntime().exec("cmd /c java -jar InputOutput.... 

See this also: Make system call and return stdout output.

Solution 2

Do you need to run the jar file in a different process? If not, you can write a Java program that invokes InputOutput.main(). Alternatively, if the name of the jar/class is only known at run-time, you can create a new class-loader, load the said class and invoke main() via reflection.

As for the redirection of input/output streams you can use System.setOut, setIn, setErr.

Solution 3

See also Execute a Java program from our Java program

Share:
13,896
Jack L.
Author by

Jack L.

Updated on June 04, 2022

Comments

  • Jack L.
    Jack L. almost 2 years

    I have a jar file that runs this code:

    public class InputOutput {
    
        /**
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            boolean cont = true;
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            while (cont) {
                System.out.print("Input something: ");
                String temp = in.readLine();
                if (temp.equals("end")) {
                    cont = false;
                    System.out.println("Terminated.");
                }
                else
                    System.out.println(temp);
            }
        }
    }
    

    I want to program another java class that executes this jar file and can get the input and send output to it. Is it possible? The current code I have is this but it is not working:

    public class JarTest {
    
        /**
         * Test input and output of jar files
         * @author Jack
         */
        public static void main(String[] args) {
            try {
                Process io = Runtime.getRuntime().exec("java -jar InputOutput.jar");
                BufferedReader in = new BufferedReader(new InputStreamReader(io.getInputStream()));
                OutputStreamWriter out = new OutputStreamWriter(io.getOutputStream());
                boolean cont = true;
                BufferedReader consolein = new BufferedReader(new InputStreamReader(System.in));
                while (cont) {
                    String temp = consolein.readLine();
                    out.write(temp);
                    System.out.println(in.readLine());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }
    

    Thanks for your help

  • Jack L.
    Jack L. about 15 years
    How would I redirect it in my code using setIn and setOut to get the jar input/output?
  • Jack L.
    Jack L. about 15 years
    How would you do this? I am not quite sure I understand. What do I put into a new thread?