he modificado el código para incluir algunas comprobaciones:
public class Laj {
private static void printLines(String name, InputStream ins) throws Exception {
String line = null;
BufferedReader in = new BufferedReader(
new InputStreamReader(ins));
while ((line = in.readLine()) != null) {
System.out.println(name + " " + line);
}
}
private static void runProcess(String command) throws Exception {
Process pro = Runtime.getRuntime().exec(command);
printLines(command + " stdout:", pro.getInputStream());
printLines(command + " stderr:", pro.getErrorStream());
pro.waitFor();
System.out.println(command + " exitValue() " + pro.exitValue());
}
public static void main(String[] args) {
try {
runProcess("javac Main.java");
runProcess("java Main");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Aquí es el Main.java:
public class Main {
public static void main(String[] args) {
System.out.println("ok");
}
}
Cuando todo está bien, simplemente funciona:
[email protected]:~/tmp$ java Laj
javac Main.java exitValue() 0
java Main stdout: ok
java Main exitValue() 0
Ahora, por ejemplo, si tengo algún error en Main.java:
[email protected]:~/tmp$ java Laj
javac Main.java stderr: Main.java:3: package Systems does not exist
javac Main.java stderr: Systems.out.println("ok");
javac Main.java stderr: ^
javac Main.java stderr: 1 error
javac Main.java exitValue() 1
java Main stdout: ok
java Main exitValue() 0
Todavía se imprime "ok" porque la clase principal previamente compilada todavía está allí, pero al menos se puede ver exactamente lo que está sucediendo cuando se están ejecutando los procesos.
Parece que estás buscando http://docs.codehaus.org/display/JANINO/Home;). – phihag
@phihag es solo un ejemplo de código java. Lo generalizaré con código c/C++ y ohters –
¿No se supone que debes usar 'Process.getOutputStream'? –