Ho modificato il codice per includere alcuni controlli:
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();
}
}
}
Ecco la Main.java:
public class Main {
public static void main(String[] args) {
System.out.println("ok");
}
}
Quando tutto va bene, funziona:
[email protected]:~/tmp$ java Laj
javac Main.java exitValue() 0
java Main stdout: ok
java Main exitValue() 0
Ora, ad esempio, se ho qualche errore in 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
esso stampa ancora "ok", perché il Main.class precedentemente compilato è ancora lì, ma almeno si può vedere cosa sta succedendo quando i processi sono in esecuzione.
fonte
2011-01-30 13:05:08
Sembra che tu stia cercando http://docs.codehaus.org/display/JANINO/Home;). – phihag
@phihag è solo un esempio di codice java. Lo generalizzerò con codice c/C++ e ohters –
Non dovresti usare 'Process.getOutputStream'? –