0

我用 Java 编写了一个程序,并有一个可执行的 jar,客户需要在 Windows 或 Mac 机器上打开它。我的一些客户是……不是计算机人。

因此,我需要编写两个脚本(如果有人知道如何使用 Mac 和 Windows 的单个脚本来做到这一点,那就太棒了)通过在 Mac 和 Windows 上双击来自动启动我的可执行 jar。如果 Java 安装正确,脚本应该可以正常工作。如果没有安装 Java,那么他们应该知道得更好。

这是我的 Windows 机器批处理脚本:

start javaw -jar ExecutableProgram.jar

但是,我不确定为 Mac 机器制作什么样的脚本。我应该使用什么类型的脚本?

苹果脚本?嘘?它需要能够通过双击执行。

4

2 回答 2

2

在 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 的命令行界面);您将获得一个窗口,该窗口将保持打开状态,直到脚本终止;当脚本终止时,所述窗口不会(或可能不会)关闭;并且终端不会自行退出。因此,它更明显是二等公民。

于 2012-06-26T09:45:31.523 回答
0

虽然我不确定 java 命令,但您可以将此 AppleScript 保存为应用程序,以便在双击时运行它。

set theFolder to quoted form of "/Users/CODe/Desktop/yourFolder"
    do shell script "cd " & theFolder & " ; java -jar ProfessionalMediator.jar"

您还可以通过保存为应用程序的 AppleScript 在终端中执行此操作:

tell application "Finder" to set theFolder to POSIX path of (file (path to me)'s container as alias)
tell application "Terminal"
    activate
    do script "cd " & theFolder & " ; java -jar ProfessionalMediator.jar" in window 1
end tell
于 2012-06-26T02:26:46.923 回答