java如何使用runtime,在Java中使用Runtime.exec()

What do you have to do in Java to get the Runtime.exec() to run a program that is on the path? I'm trying to run gpsbabel which I have put into the path (/usr/local/bin).

public class GpxLib {

public static void main(String[] args) {

try

{

Runtime r = Runtime.getRuntime();

Process p = r.exec("gpsbabel -i garmin -f usb: -o gpx -F -");

InputStream is = p.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

while (true)

{

String s = br.readLine();

if (s == null)

break;

System.out.println(s);

}

br.readLine();

} catch (IOException e) {

e.printStackTrace(System.err);

}

}

}

解决方案

It will inherit the path from the Java process. So whatever environment the Java process has, the spawned process will have as well. Here's how to check the environment:

Map env = System.getenv();

for (String envName : env.keySet()) {

System.out.format("%s=%s%n", envName, env.get(envName));

}

Have you set the PATH and exported it ? If you don't export it, then it's not available to subprocesses.

Additionally, you must consume stdout and stderr concurrently, to prevent blocking. Otherwise stuff will work in some circumstances, then your spawned process will output a different quantity of data and everything will grind to a halt.

See this answer for more details.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值