Я разрабатываю небольшое приложение Java jar для хранения данных в файле.xml с использованием сервера BaseX. В начале, перед началом основной программы, мне необходимо, чтобы Basex Server был правильно запущен и активирован. Итак, вот что я делаю:
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" верна. Зачем?
Если процесс запускается в фоновом режиме после запуска, вы можете проверить, что 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