在 Mac OS X 上,双击一个 Jar 应该会自动打开它。但是,我没有很好的方法来测试它;因为我是一名开发人员,所以我的计算机做了很多特殊的事情 :-) 特别是,Apple 自己的 Java 运行时在 10.6 中已被弃用,我不知道其他 Java 运行时附带了哪些工具。尽管如此,如果这种方法有效(我认为它会有效),那是最好的选择。
如果这不起作用,那么下一个最佳选择是使用 AppleScript,就像adayzdone建议的那样。我将使用的 AppleScript 将改为:
do shell script (¬
"cd " & quoted form of POSIX path of (path to me) & "/.. ; " & ¬
"java -jar ExecutableProgram.jar")
该quoted form of ...
位获取脚本的路径 ( path to me
),将其转换为 Unix 路径 ( POSIX path of ...
),并为 shell 引用特殊字符 ( quoted form of ...
);由于脚本在目录中运行,因此您还需要/..
访问 Jar 所在的父目录。要使其可双击,请将文本复制并粘贴到 AppleScript 编辑器中,然后在“保存...”对话框中,将文件格式设置为“应用程序”。(要对其进行编辑,请从 AppleScript 编辑器中打开应用程序。)这种方法的缺点是您将运行两个应用程序:真正的 Java 应用程序和 Mac shell。有两种方法可以解决这个问题:
- 如果命令的命令行输出不重要,请将 AppleScript 第三行的字符串更改为
"java -jar ExecutableProgram.jar &>- &"
:&>-
以关闭输出流,并&
在后台运行它。(只是&
行不通。)
- 更复杂的方法不会退出 AppleScript,只是隐藏它:
- 按住 Control 键单击您的 AppleScript 应用程序并选择“显示包内容”
- 导航到
Contents/
文件夹并打开Info.plist
- 添加
LSUIElement
带有值的键true
:
- 如果它是纯文本 XML 格式(不是二进制格式),您可以添加
<key>LSUIElement</key><true/>
- 从命令行,这是
defaults write /full/path/to/Info LSUIElement -bool true
(请注意,您需要以 a 开头的完整路径/
,例如通过 using 获得"$(pwd)/Info"
,但您不能提供.plist
扩展名)。
- 您还可以使用 Apple 的“属性列表编辑器”应用程序,该应用程序(至少曾经)与开发人员工具一起提供;免费的第三方属性列表编辑器也存在。
如果这不起作用,那么最简单的方法就是编写一个 Unix shell 脚本而不是 Windows 批处理脚本。它必须与.command
扩展名一起保存,并设置其可执行位 ( chmod +x file.command
)。内容应该是
#!/bin/sh
cd "$(dirname "$0")"
java -jar ExecutableProgram.jar
(如果你不熟悉 Unix shell 脚本:第一行声明这是一个 shell 脚本;第二行进入 shell 脚本所在的目录;第三行执行相关操作。)这种方法的原因是不太理想的是它会打开终端(OS X 的命令行界面);您将获得一个窗口,该窗口将保持打开状态,直到脚本终止;当脚本终止时,所述窗口不会(或可能不会)关闭;并且终端不会自行退出。因此,它更明显是二等公民。