Во-первых, вам нужно дождаться завершения компиляции, прежде чем выполнять второй процесс. Используйте метод waitFor ():
int compilationResult = -1;
try {
compilationresult = p.waitFor();
}
catch (InterruptedException ie) {
...
}
Затем проверьте compilationResult (значение 0 указывает на успешную компиляцию), чтобы определить, следует ли продолжить с остальной частью кода.
Во-вторых, если вы закончили с процессом p1 после обработки его вывода, то вам следует либо дождаться его завершения, либо завершить его самостоятельно - в зависимости от того, ожидаете ли вы, что процесс завершится сам по себе.
Чтобы дождаться нормального завершения процесса, используйте блок кода, аналогичный приведенному выше, заключив p1.waitFor()
в блок try
/ catch
.
Чтобы убить его самостоятельно, используйте:
p1.destroy();
После того, как вы убедитесь, что процесс завершен, вы можете проверить значение выхода с помощью p1.exitValue()
. Зачем быть таким осторожным? Что ж, вам, вероятно, не стоит доверять выводу, который вы собираете и записываете в this.txt
, пока не убедитесь, что процесс выполнен правильно.