import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ExecuteShellComand {
public static void main(String[] args) {
ExecuteShellComand obj = new ExecuteShellComand();
String className = "str.java";
String command = "javac " + className;
String output = obj.executeCommand(command);
System.out.println(output);// prints the output of the executed command
}
private String executeCommand(String command) {
StringBuffer output = new StringBuffer();
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
}
Я пытаюсь скомпилировать Java-файл (str.java) из другого Java-класса (ExecuteShellComand.java). То, что я пытаюсь сделать, - это если «str.java» успешно компилируется, тогда я хочу выполнить команду «java str», но если компиляция завершилась неудачей, следует напечатать правильную стеклу или ошибки. Я сохраняю stacktrace или ошибки в переменной output
.компиляция java-файла из другого класса Java
Но когда я выполняю этот код, хотя «str.java» имеет в нем ошибки, System.out.println(output)
не печатает ошибки.
Кстати, так как Java 6, Java обеспечивают стандартный способ компиляции классов во время выполнения. Проверьте эту статью здесь: http://java-bytes.blogspot.de/2012/03/compile-java-files-at-runtime.html – rdllopes