2012-04-27 112 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)。

我不知道什么是hapening。为什么第二个应用程序没有保留环境?欢迎任何想法或帮助:)

谢谢!

+0

你能张贴在代码“在接下来的一句,我的Java应用程序得到控制的其他Java应用程序。”? – toto2 2012-04-27 14:39:27

+0

它调用一个外部类:Session s = new Session(); s.run(PARAMS); 。我无法控制Session类的流执行,但我希望s对象获得我修改的环境。 – smc 2012-04-27 14:49:08

+0

在Session中有一个选项以某种方式传递环境变量,或者你可以修改Session的代码,否则你会被卡住。 – toto2 2012-04-27 15:08:44

回答

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

继承人的参考 - http://docs.oracle.com/javase/tutorial/essential/environment/env.html – chrismarx 2012-04-27 13:56:56

+0

@chrismarx谢谢 – 2012-04-27 14:05:26

+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 – 2012-04-27 14:44:16

0

看写下来,然后看书,一个Java Properties文件,