我有一个Java程序,使用Runtime.exec()方法启动可执行文件。我使用的是将一组命令行参数作为一个参数和一些环境变量作为另一个参数的变体。
我想设置的环境变量是path,所以我传入了“PATH=C:\some\path”。但这并不起作用。是否有什么诀窍或替代方案。不幸的是,我被限制在Java 1.4上。
我有一个Java程序,使用Runtime.exec()方法启动可执行文件。我使用的是将一组命令行参数作为一个参数和一些环境变量作为另一个参数的变体。
我想设置的环境变量是path,所以我传入了“PATH=C:\some\path”。但这并不起作用。是否有什么诀窍或替代方案。不幸的是,我被限制在Java 1.4上。
package p;
import java.util.*;
public class Run {
static String[] mapToStringArray(Map<String, String> map) {
final String[] strings = new String[map.size()];
int i = 0;
for (Map.Entry<String, String> e : map.entrySet()) {
strings[i] = e.getKey() + '=' + e.getValue();
i++;
}
return strings;
}
public static void main(String[] arguments) throws Exception {
final Map<String, String> env = new HashMap<String, String>(System.getenv());
env.put("Path", env.get("Path") + ";foo");
final String[] strings=mapToStringArray(env);
Runtime.getRuntime().exec("cmd /C start foo.bat",strings);
}
}
一个解决方案可能是在“exec”中添加一个额外的命令,设置路径...就像在此处找到的示例中一样: http://www.neowin.net/forum/topic/620450-java-runtimegetruntimeexec-help/
摘录:
cmd = new String[7];
cmd[0] = "cmd";
cmd[1] = "/C";
cmd[2] = "set PATH=C:\\Program Files\\Java\\jdk1.6.0_04\bin";
cmd[3] = "copy " + "\"" +path + "\\" +name+ "\"" + " C:\\java";
cmd[4] = "chdir C:\\java";
cmd[5] = "javac *.java";
cmd[6] = "jar cmf mainClass.txt"+" name"+".jar *.class";
try{
Runtime.getRuntime().exec(cmd);