2012-04-27 3 views
2

Я пришел к предыдущим вопросам, опубликованным в stackoverflow. Таким образом, мой Java приложение изменяет среду системы, такие как:Сохранение переменных среды в Java

Map<String, String> env = System.getenv(); 
... 
... 
map.put("SOME_VAR_ENV", "SOME_KEY_VAR");* 

Это, кажется, работает хорошо, так как спустя несколько предложений:

System.out.println(System.getenv("SOME_VAR_ENV"));* 

печатает SOME_KEY_VAR.

И, вот моя проблема. В следующем предложении мое приложение Java дает контроль над другим Java-приложением. Мое приложение Java. вызывает внешний класс Java, который, насколько мне известно, должен создать новый дочерний процесс для запуска. Однако новый процесс не сохранил новую переменную среды (SOME_VAR_ENV).

Я понятия не имею, что происходит. Почему второе приложение не сохранило окружающую среду? Любая идея или помощь приветствуются :)

Спасибо!

+0

Не могли бы вы опубликовать код, где «В следующем предложении, мой Java приложение дает управление другим приложением Java.»? – toto2

+0

Он вызывает внешний класс: Session s = new Session(); s.run (PARAMS); , Я не могу контролировать выполнение потока класса Session, но я хочу, чтобы объект s получил среду, которую я изменил. – smc

+0

Либо есть опция в сеансе, чтобы каким-то образом передать переменные среды, либо вы можете изменить код сеанса, или вы застряли. – toto2

ответ

2

Используйте ProcessBuilder API для запуска дочернего процесса, это позволяет установить переменные окружения:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); 
Map<String, String> env = pb.environment(); 
env.put("VAR1", "myValue"); 
env.remove("OTHERVAR"); 
env.put("VAR2", env.get("VAR1") + "suffix"); 
pb.directory(new File("myDir")); 
Process p = pb.start(); 

Там нет кросс-платформенный способ в Java, чтобы установить переменные окружения вызывающего контекста.

+1

heres ссылка тоже - http://docs.oracle.com/javase/tutorial/essential/environment/env.html – chrismarx

+0

@chrismarx спасибо –

+0

Вы также можете сделать это с помощью Runtime.exec, но api намного хуже: http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String%5B%5D%2C%20java.lang .String% 5B% 5D% 29 –

0

Посмотрите в письменной форме, а затем читать, а Properties файл Java,

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