Я разрабатываю небольшое приложение 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» верна. Зачем?
Спасибо за ответ, но я боюсь, что это не работает, потому что «basexserver.bat» запускает сервер, который никогда не остановится, пока основная программа не будет закрыта ... так что я не могу назвать Waitfor после Process server = runtime.exec ("cmd/C basexserver.bat"); в противном случае моя программа будет блокироваться до тех пор, пока сервер не будет остановлен, и поэтому его невозможно использовать. –
В этом случае вам необходимо отслеживать поток ошибок. Создайте регулярное выражение, которое предупредит вас в случае ошибки. – Mikhail
Возможно, я запутался ... мне нужно проверить, что команда была успешно выполнена ... Я не могу проверить значение выхода после запуска сервера baseX, потому что я бы получил «java.lang.IllegalThreadStateException: процесс не вышел». .. Я хочу, чтобы сервер работал до того, как используется основная программа. –