Java: как проверить, правильно ли была запущена программа?

1

Я разрабатываю небольшое приложение 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" верна. Зачем?

Теги:
command-line
command

1 ответ

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
    В этом случае вы должны отслеживать поток ошибок. Создайте регулярное выражение, которое предупредит вас в случае ошибки.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню