process.waitFor();
int exitCode = process.exitValue();
if(exitCode == 0) { // success }
else { // failed }
Это работает, если Test
спроектирована правильно и возвращает соответствующие коды выхода (как правило,> 0, если что-то пошло не так).
Если вы хотите получить Test
сек сообщения выхода/ошибку, чтобы определить, что было неправильно, вы должны получить proc.getInputStream()
(это возвращает поток вывода дочернего процесса), proc.getErrorStream()
и читать из входных потоков в разделенных потоках.
Обратите внимание, что дочерний процесс будет заблокирован, если он будет записывать в поток ошибок/вывода, и нет считывателей. Поэтому чтение ошибок/выходных потоков процесса полезно в любом случае.
Другой вариант, чтобы избежать блокировки ребенка, чтобы перенаправить ошибку/вывод в файл и/или к /dev/null
(«NUL» для окон):
Runtime.exec("java Test >/dev/null 2>&1");
Runtime.exec("java Test >/dev/null 2>erroroutput");
Возможно, вы не всегда можете вызвать класс внутри своей собственной JVM, хотя это более эффективно. Опять же, почему бы просто не вызвать `Test.sameStaticMethod()`? – Marc 2010-12-05 09:49:46
@Marc: Может быть, имя класса неизвестно во время компиляции? – thejh 2010-12-05 09:52:03
@thejh Возможно, вы захотите выполнить Java-код в отдельной JVM, чтобы избежать, например, ограничения на 32-разрядную память. – khachik 2010-12-05 09:53:12