我使用ImageMagick
在Mac OS X(10.7)。 我的帮助下安装了它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
相同的代码工作完全在Windows在那里ImageMagick
也被安装。
那么,为什么im4java没有找到identify
的PATH
呢?
尝试搜索路径设置到目标目录:
import org.im4java.process.ProcessStarter;
ProcessStarter.setGlobalSearchPath("/opt/local/bin");
喜欢它的描述这里OS X 10.8和这里的OS X 10.7的唯一完整的解决方案是设置PATH
中/etc/launchd.conf
。
每默认PATH
为应用程序设置IST到/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!
您可以复制你的PATH
与下面的代码Java应用程序:
public class Main {
public static void main (String[] args) {
System.out.println("PATH=" + System.getenv().get("PATH"));
}
}
还有第二个解决办法,如果你从一个IDE像Eclipse可以设置PATH有作为内开始你的计划。 在Eclipse中,你可以做,通过Run | Run Configurations | Environment
Run | Run Configurations | Environment
Run | Run Configurations | Environment
而下的左侧边栏上选择启动配置Java Application
。
我做了下面的代码,并复制它image.jpg
位于${user.dir}
又名您的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
第一输出线显示您的PATH
你现在运行Java应用程序。 第二输出线来自identify image.jpg
。
注:我正在运行的Mac OS X 10.8.2和2.1.3 MacPorts的
注意:有Mac OS X的10.8之前的方式来设置对用户群利用用户的全局变量~/.MacOSX/environment.plist
。 但是,这已不再工作了与山狮(又名的Mac OS X 10.8)开始。 详细信息可以在这里签出:
- https://apple.stackexchange.com/questions/57385/where-are-system-environment-variables-set-in-mountain-lion
我认为Java程序不是从shell启动,或作为其他用户(在后一种情况下,我的回答不会帮助)。 同样是真实为MacOS 10.8,这个方法行不通那里,乌韦指出(详见注释)。
当一个程序从别的比外壳的某处开始,像外壳配置脚本设置环境变量profile
或bashrc
显然是不可用的。 要设置环境变量为这些应用程序,使用文件.MacOSX/environment.plist
在你的主目录。 要创建该文件,则需要使用shell,然后用自带的Xcode属性列表编辑器中打开它,并设定PATH
变量所需的值。 有关详细信息看看苹果的文档: Mac开发者库:用户会话环境变量
下面是一个内容的例子environment.plist
文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LSCOLORS</key>
<string>gxfxcxdxbxegedabagacad</string>
<key>PATH</key>
<string>/usr/local/bin:/usr/local/sbin:/usr/X11/bin:/usr/local/share/python</string>
</dict>
</plist>