# Programm aus anderem Programm compilieren und starten



## borislav (11. Februar 2005)

Ich habe ein Programm, das ein anderes Programm Erg.java erzeugt. Jetzt möchte ich das auch dieses Programm auch automatisch compiliert und gestartet wird.

Wie kann ich den Befehl "javac" in Programm ausführen?
Wie kann ich ein Programm, die in Verzeichniss "c:\Java\jdk1.4\bin\Erg.java" liegt ?


```
try{
 
Runtime.getRuntime().exec("javac Erg.java");
 
} catch (Exception e){System.err.println(e.toString());}
```


----------



## Thomas Darimont (11. Februar 2005)

Hallo!

Wenn du das tools.jar in den Classpath legst kannst du folgendes machen:

```
/*
 * Created on 11.02.2005@17:43:59
 *
 * TODO Licence info
 */
package de.tutorials;

import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

import com.sun.tools.javac.Main;


/**
 * @author Administrator
 *
 * TODO Explain me
 */
public class CompilerTest {

    public static void main(String[] args) {
        Main.compile(new String[]{"c:/Test.java"});
        try {
            URLClassLoader ucl = new URLClassLoader(new URL[]{new File("c:/").toURL()});
            Class clazz = ucl.loadClass("Test");
            Object o = clazz.newInstance();
            Method m = clazz.getMethod("foo",new Class[0]);
            m.invoke(o,new Object[0]);
            
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}
```

Test.java (liegt unter c:\)

```
public class Test{
  public void foo(){
     System.out.println("tutorials.de");
  }
}
```

Gruß Tom


----------

