我导入了一个执行以下命令的库
Runtime.getRuntime().exec("svd");
现在在我的bash shell中,我可以执行svd,因为它指向已安装的文件夹“/ usr / local / bin / svd”。但是我的java程序无法执行“svd”和eclipse返回错误“无法运行程序”svd“:错误= 2,没有这样的文件或目录”
我在eclipse的运行配置中将以下内容添加到我的环境变量中。
$PATH = /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/bin/svd
svd = /usr/local/bin/svd
然而eclipse仍然说它无法运行程序“svd”。有没有办法解决这个问题,除了手动编写完整路径?
e.g Runtime.getRuntime().exec("/usr/local/bin/svd");
答案 0 :(得分:1)
不能运行svd
程序而不是jvm
的eclipse,因为它无法在系统上找到svd's
路径。
你应该将你的svd程序放在$PATH
变量上,这样当JVM运行程序并找到对svd的调用时,它应该知道这个svd
程序的位置,以便它可以调用它。
有关如何在OSX上配置$ PATH变量,请在此处查看:Setting environment variables in OS X?
我还注意到你使用Runtime
在java程序中运行外部程序。这是在java中运行外部程序的古老方法。您应该考虑使用ProcessBuilder
。它更加灵活,被认为是现在运行外部程序的最佳选择:
ProcessBuilder pb = new ProcessBuilder("svd");
Process p = pb.start();
//You could also read the error stream, so that when svd is not correctly set on the running system, you may alert the user.
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
int retCode = p.waitFor();
if(retCode == 2){
//alert the user that svd is not correctly set on PATH variable.
LOGGER.error(sb);
System.out.println("ERROR!! Could not run svd because it's not correctly set on PATH variable");
}