2014-11-27 3 views
1

Я разрабатываю небольшое приложение Java jar для хранения данных в файле file.xml с использованием сервера BaseX. В начале, перед запуском основной программы, мне необходимо, чтобы Basex Server был правильно запущен и активирован. Так вот что я делаю:Java: как проверить правильность запуска программы?

Runtime runtime = Runtime.getRuntime(); 

if (isWindows(os)) { 
    Process server = runtime.exec("cmd /C basexserver.bat"); 
    System.out.println(server.waitFor()); 

} 

else { 
    if (isLinux(os)) { 
     runtime.exec("basexserver"); 
    } 
} 

Чтобы проверить BaseXServer правильно работает, я попытался проверить значение, возвращенное методом Waitfor, и если это значение равно 0, то команда была успешно выполнена, а если возвращаемый значение больше 0, то произошла ошибка. Проблема в том, что этот метод всегда возвращает 1, но команда «basexserver.bat» верна. Зачем?

ответ

1

Если процесс начинается с фона после запуска, вы можете проверить exitValue() на нуль. Во-вторых, вы можете подключиться к ошибкам и стандартным выводам с помощью методов getErrorStream() и getInputStream(). И контролируйте их для сообщений об ошибках. Посмотрите также на паттерн ружья, это может быть полезно. Некоторый процесс может зависеть, если его выход не потребляется.

https://docs.oracle.com/javase/7/docs/api/java/lang/Process.html http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html

+0

Спасибо за ответ, но я боюсь, что это не работает, потому что «basexserver.bat» запускает сервер, который никогда не остановится, пока основная программа не будет закрыта ... так что я не могу назвать Waitfor после Process server = runtime.exec ("cmd/C basexserver.bat"); в противном случае моя программа будет блокироваться до тех пор, пока сервер не будет остановлен, и поэтому его невозможно использовать. –

+0

В этом случае вам необходимо отслеживать поток ошибок. Создайте регулярное выражение, которое предупредит вас в случае ошибки. – Mikhail

+0

Возможно, я запутался ... мне нужно проверить, что команда была успешно выполнена ... Я не могу проверить значение выхода после запуска сервера baseX, потому что я бы получил «java.lang.IllegalThreadStateException: процесс не вышел». .. Я хочу, чтобы сервер работал до того, как используется основная программа. –

Смежные вопросы