2010-08-23 2 views
0

У меня есть простое серверное приложение, которое я бы хотел запустить в фоновом режиме. Следующая строка работает для меня:Java Runtime.exec работает java-проблема

Runtime.getRuntime().exec("cmd /c start java -jar ..\\server\\server.jar -Dlog4j.configuration=file:src\\test\\resources\\log4j.properties -filename src\\test\\resources\\server.properties"); 

Но он отображает cmd окно и я не могу его уничтожить. Поэтому я хотел бы использовать

Runtime.getRuntime().exec("java -jar ..\\server\\server.jar -Dlog4j.configuration=file:src\\test\\resources\\log4j.properties -filename src\\test\\resources\\scIntegration.properties"); 

Но он просто не подключается к серверу. Так почему это?

Связанный вопрос. Как завершить процесс? Это сервер, который «не заканчивается». Поэтому я должен убить его, и я бы предположил, что запуск команды java может быть уничтожен, но с cmd мне не повезло.

ответ

0

Сервера outputing что-то на стандартный вывод и в сокращенных командах версии у него не было места для вывода, поэтому он застрял при попытке вывода некоторых данных. Решение состоит в том, чтобы передать stdout, например, на некоторый файл.

0

Попробуйте использовать абсолютный путь к java-программе.

Для уничтожения: exec() возвращает java.lang.Process, который вы сможете уничтожить. Если нет, вы должны реализовать некоторый тип обратного вызова, чтобы закрыть ваш сервер, например. прослушивание определенной команды для команды выключения.

+0

Я уже пробовал абсолютные пути. Не использовать. Я не могу ничего реализовать на сервере, это проблема с Process.destroy(). – Trimack

2

Вы должны разделить вашу команду в массив, в котором первый аргумент является фактической команда для запуска и все остальные команды как аргументы:

Runtime.getRuntime().exec(new String[] {"/usr/bin/java", "-jar", "..\\server\\server.jar" ...}); 
+0

Я пробовал это с тем же результатом :( – Trimack

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