首页 > 解决方案 > ProcessBuilder start() 方法在 eclipse/mac 中运行命令 (ffprobe)

问题描述

我已经在mac中安装了ffprobe,目录是/usr/local/bin/ffprobe。当我在终端中运行 ffprobe 命令时,它可以正常工作,但是当我通过 ProcessBuilder 在 eclipse 中运行它时,它不会运行并抛出异常Caused by: java.io.IOException: Cannot run program "ffprobe": error=2, No such file or directory. 但是,当我运行 ProcessBuilder 并给出 ffprobe 的绝对路径时,它可以正常工作。

工作代码:

sample args:[/usr/local/bin/ffprobe, -v, quiet, -print_format, json, -show_format, -show_streams, some_url]

ProcessBuilder pb = new ProcessBuilder(cmdArgs);
Process proc = pb.start();

但是,如果 args 是[ffprobe, -v, quiet, -print_format, json, -show_format, -show_streams, some_url]

它抛出错误。如何在不提供绝对路径的情况下运行 ffprobe 命令?我已经关注了这篇文章,但无法解决我的问题。

我在 Eclipse 中的 java 进程正在运行

Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/

标签: javaeclipseprocessbuilderffprobe

解决方案


最后,我能够通过 Sakra 在这篇文章中提到的以下步骤解决这个问题:

  1. 在 /Applications/Eclipse.app/Contents/MacOS/ 创建 eclipse.sh
export ENV_VAR1=/usr/local/bin/
logger "`dirname \"$0\"`/eclipse"
exec "`dirname \"$0\"`/eclipse" $@
  1. chmod +x /Applications/Eclipse.app/Contents/MacOS/eclipse.sh

  2. 打开 Eclipse.app Info.plist 并将键 CFBundleExecutable 的值从 eclipse 更改为 eclipse.sh。

  3. 强制将 LaunchService 更新为

    /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app


推荐阅读