Jump to Real's How-to Main page

Launch an application from another application

While you can exec("java myaotherapp"), 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

If you find this article useful, consider making a small donation
to show your support for this Web site and its content.

Written and compiled by Réal Gagnon ©1998-2005
[ home ]