我一直在寻找使用Java运行时运行外部程序的方法。这很好,例如:
String[] cmd = {"mkdir", "test"};
Runtime.getRuntime().exec(cmd);
按预期创建新目录。现在,从Mac的bash窗口我可以写下:
love testgame
在名为testgame的文件夹上运行'Love'游戏引擎。现在,这个工作的原因是因为我把爱“别名”称为爱可执行文件。我有一种感觉,这就是以下不工作的原因:
String[] cmd = {"love", "/Users/mtc06/testgame"};
Runtime.getRuntime().exec(cmd);
这也不是(对于那些想知道的人):
String[] cmd = {"/bin/bash", "love", "/Users/mtc06/testgame"};
Runtime.getRuntime().exec(cmd);
毫无疑问,这可能是我的一些Java白痴,或者是一些与别名起作用的方式发生冲突。我把它交给你尊敬的知识分子,所以!“
更新:这也不起作用:
String[] cmd = {"/bin/sh", "/Applications/love", "/Users/michaelcook/Desktop/Playout"};
Runtime.getRuntime().exec(cmd);
我收到的错误是运行时生成的进程中的127。无论我在哪里研究它,我都会把它当作“命令未找到”。
答案 0 :(得分:7)
我怀疑你遇到的问题是用于查找可执行文件的路径。这取决于您是否使用OSX应用程序或unix cmd
如果 unix cmd (或使用OSX应用程序的Unix部分,例如/Applications/AppName.app/Contents/MacOS/AppName),则有两种方法可以解决此问题
将完整路径放在Java代码中的可执行文件中,例如
String[] cmd = {"/full/absolute/path/to/love", "/Users/mtc06/testgame"};
更改包含可执行文件的路径。这取决于java启动的方法。
a)如果从命令行运行java,则将可执行文件的目录添加到PATH环境变量中 b)如果从Finder运行java程序,则必须在〜/ MacOSX / environment.plist中更改路径,例如添加/ Users / mark / bin
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PATH</key>
<string>/Users/mark/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/libexec/binutils:</string>
</dict>
</plist>
如果应用是 OSX应用,您需要使用open启动它,所以命令行是
open -a love.app "/Users/mtc06/testgame"
所以Java命令是(未经测试)
String[] cmd = {"/usr/bin/open", "-a" , "love.app", "/Users/mtc06/testgame"};