Share this page 

Launch an application from another applicationTag(s): IO Language


While you can exec("java myanotherapp"), it is more appropriate to instanciate and called the main method of the other application.

For example, take this simple application :

public class Program2 {
    public static void main(String arg[]) {
        System.out.println("Hello from Program2");
    }
}
To call the above application from another
public class Program1a {
    public static void main(String arg[]) {
        System.out.println("Hello from Program1a");
        new Thread(){
            public void run() {
                Program2.main(new String[]{});}
                }.start();
    }

}
The above example is used when the class is hard-coded.

The dynamic version is little more tricky.

public class Program1b {
    public static void main(String arg[]) {
        System.out.println("Hello from Program1b");
        new Program1b().execute("Program2");
    }

    public void execute(String name) {
        Class params[] = {String[].class};
        //  if you need parameters
        //    String[] args = new String[] { "Hello", "world" };
        //    Class params[]  = new Class[] { args.getClass() });
        try {
            Class.forName(name).
               getDeclaredMethod("main",  params).
                  invoke(null, new Object[] {new String[] {}});
            }
        catch(Exception e){ e.printStackTrace();}
    }
}

Launch many programs using Thread and use join() to wait for the completion.

[Program2.java]
public class Program2 {
    public static void main(String arg[]) {
        System.out.println("Hello from Program2");
        System.out.println("Hello from Program2");
        System.out.println("Hello from Program2");
        System.out.println("Hello from Program2");
    }
}

[Program1a.java]
public class Program1a {
    public static void main(String arg[]) throws Exception{
        System.out.println("Hello from Program1a");
        Thread t1 = new Thread(){
            public void run() {
                Program2.main(new String[]{});}
                };
        t1.start();
        t1.join();
        System.out.println("Hello from Program1a");
    }
}
The output :
C:\>java Program1a
Hello from Program1a
Hello from Program2
Hello from Program2
Hello from Program2
Hello from Program2
Hello from Program1a