2012-06-07 2 views
0

У меня есть внешняя программа, которую я запускаю. по какой-то причине владелец кода не предоставил мне код или хорошую документацию, я знаю, как запустить этот код, но он был написан оригинально для выполнения из командной строки, а не из JAVA. Влияние на меня заключается в том, что это приложение использует переменную ENV и реле по ее значению (путь на компьютере для вывода). Я хочу изменить это значение, как это можно сделать, не запуская его из пакетного файла?Создайте переменную среды программно

+1

Как вы действительно запускаете эту программу? Из командной строки или из некоторого кода оболочки java? Название вопроса и его тело в настоящий момент являются взаимоисключающими. – Vadzim

+0

Я вызываю его из другого приложения Java, используя обычный вызов метода java. – Hovav

ответ

0

В командной строке сначала установить требуемую переменную

set FILELOCATION=<PATH TO FILE> 

java MyProgram 

В этом случае FILELOCATION будет доступен до закрытия программы.

Не заданная переменная будет зависеть от ОС.

Для Linux или Solaris вы можете сделать:

export FILELOCATION=<PATH TO FILE> 

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

java MyProgram PathToFile 

Существует лучший способ сделать это java -DFILELOCATION=<PATH_TO_FILE> MyProgram

Редактировать: Согласно комментарии.

Просто используйте ProcessBuilder для установки переменной ENV в Java-коде.

+0

привет прежде всего, 10x для быстрого ответа. second: моя программа не запускается с консоли, я вызываю статический метод в объекте, который существует в файле JAR, который я получил, и внутри этого статического метода он передает переменную env. моя программа также вызывается другой java-программой, и я не хочу ретранслировать по внешнему набору переменных. Я хочу, чтобы в моем java-коде существовала переменная, если ее нет - добавьте ее и установите ее значение для моего значения, все используя java-код и не вызывая внешние инструменты, если это возможно ... – Hovav

+0

обновил мой пост – mprabhat

0

, как это можно сделать, не запуская его из пакетного файла

Просто установите глобальной переменной окружения. Все новые процессы увидят его (исключая эту наследующую среду из старого родительского процесса).

См. Также How do I set environment variables from Java?. Это отвечает за вопрос. Который не соответствует телу вопроса, кстати. ;)

0

См. this post. Обычно это помогает сначала начать поиск здесь, прежде чем отправлять вопрос. Если вы уже пробовали это решение, это действительно помогает помощникам сообщить им, что вы его попробовали, и что пошло не так.

1

Я предполагаю, что вы выполняете эту программу, используя один из методов .exec() в Java-коде для создания Process.

Обратите внимание, что некоторые из этих методов позволяют передавать переменные среды в процесс, который вы создаете, например exec(String[] cmd, String[] envp).

В качестве альтернативы, карта, возвращаемая ProcessBuilder.environment(), может управляться с тем же эффектом.

+0

hi Я запускаю его с помощью прямого вызова java, и это моя проблема ... – Hovav

+1

Я не понимаю, что вы подразумеваете под прямым вызовом java " – sudocode

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