java - Mac OS X 上的 Java 运行时无法在 PATH 中找到程序

标签 java macos path imagemagick identify

我在 Mac OS X (10.7) 上使用 ImageMagick。我在 MacPorts 的帮助下安装了它。

当我现在进入终端并写:

identify image.jpg

它工作得很好。

但是现在从 Java 中执行它时,会抛出以下异常:

org.im4java.core.CommandException: java.io.FileNotFoundException: identify

我可以通过运行看到它在 PATH 上:

which identify

响应:

/opt/local/bin/identify

现在正在运行:

echo $PATH

我收到回复:

/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

相同的代码在安装了 ImageMagick 的 Windows 上也能完美运行。

那么为什么 im4java 在 PATH 中根本找不到 identify

最佳答案

就像描述的那样here for OS X 10.8here for OS X 10.7唯一完整的解决方案是在 /etc/launchd.conf 中设置您的 PATH

默认情况下,应用程序的 PATH 设置为 /usr/bin:/bin:/usr/sbin:/sbin,即使您不这样做 有一个 /etc/launchd.conf

因此您必须在终端中执行以下操作:

sudo vi /etc/launchd.conf

并添加以下行或修改它(如果它已经存在):

setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

重要提示:现在您需要重启您的 Mac!

您可以使用以下代码在您的 Java 应用程序中重现您的 PATH:

public class Main {
    public static void main (String[] args) {
        System.out.println("PATH=" + System.getenv().get("PATH"));
    }
}

还有第二种解决方案,如果您从像 Eclipse 这样的 IDE 中启动您的程序,您也可以在那里设置 PATH。在 Eclipse 中,您可以通过 Run |运行配置 |环境,同时在 Java Application 下的左侧栏中选择您的启动配置。

我确实使用以下代码和位于 ${user.dir} 中的 image.jpg 重现了它,也就是您的 Java 应用程序从中启动的当前目录。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Main {
    public static void main (String[] args) {
        System.out.println("PATH=" + System.getenv().get("PATH"));
        try {
            Process exec = Runtime.getRuntime().exec("identify image.jpg");
            InputStream is = exec.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            System.out.println(br.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} 

运行上面的代码后你应该得到类似的输出:

PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
image.jpg JPEG 690x518 690x518+0+0 8-bit sRGB 152KB 0.000u 0:00.000

第一行输出显示您当前运行的 Java 应用程序的 PATH。 第二行输出来自identify image.jpg

注意:我运行的是 Mac OS X 10.8.2 和 MacPorts 2.1.3


注意:在 Mac OS X 10.8 之前,有一种方法可以使用 ~/.MacOSX/environment.plist 按用户群设置用户的全局变量。但从 Mountain Lion(又名 Mac OS X 10.8)开始,这不再有效。详情可以在这里查看:

关于java - Mac OS X 上的 Java 运行时无法在 PATH 中找到程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15115971/

相关文章:

java - 如何在java中将二维整数数组转换为图像?

java - 看起来像曲棍球棒的数据公式

java - 我的图形用户界面在运行时占用了太多资源

macos - Swift - 使用字典 - 添加多个值

PHP:从绝对URL获取绝对路径

php - 我想在没有路径的情况下回显 __FILE__ 名称。我只想命名页面,例如 : index. php

java - Java中字符串数组的自定义解析

macos - 哪个是Mac上最好的免费代码编辑器?

macos - OS X 码头 API?检索带有徽章和其他修改的 OS X 事件应用程序图标

java - 从照片中裁剪自定义形状