【问题标题】:Exporting jar with VM arguments使用 VM 参数导出 jar
【发布时间】:2014-04-12 18:39:35
【问题描述】:

我用 Eclipse 编写了一个 Java 应用程序,它使用 SWT 作为 UI。 (详见SWT Exception when running jar: Exception in thread "main" org.eclipse.swt.SWTException: Invalid thread access)。

我导出为 JAR,但无法从 Finder 和终端运行它。我终于用java -XstartOnFirstThread -jar CommonDenom.jar从终端运行它了

但是,当我从 Eclipse 导出为 JAR 时,我仍然无法运行它。这是因为它需要在导出时绑定参数-XstartOnFirstThread。然后我注意到在Properties >> Run/Debug Settings >> commonDenom >> Edit >> (x)= Arguments 中有一个勾选框,上面写着“使用SWT 启动时使用-XstartOnFirstThread 参数”。但是已经检查过了。所以我认为这个选项只适用于使用 Eclipse 启动代码时,不适用于导出的 JAR。

所以我手动将参数添加到同一选项卡中的VM Arguments 框中。当我将导出为可运行 JAR 时,我注意到一条警告显示“VM 参数不会成为可运行 JAR 的一部分。启动 JAR 时可以在命令行上传递参数。

最终,我需要一种方法来让它从 finder(无论是 JAR 还是其他)启动,而无需打开终端并手动启动它。是的,我可以写一个Shell脚本来启动它,但我觉得一定有更简单的方法。

【问题讨论】:

    标签: java eclipse macos jar swt


    【解决方案1】:

    你有两个选择。最简单的方法是创建一个 shell 脚本:

    #!/bin/bash
    java -XstartOnFirstThread -jar CommonDenom.jar
    

    用户运行脚本,该脚本设置参数并运行 Java。

    另一种方法是创建一个Application Bundle。它包含一个属性文件 (Info.plist),您可以在其中设置这些属性。您还可以使用 Oracle 的 appbundler tool 创建应用程序包。

    【讨论】:

    • 如果我创建一个 shell 脚本,我会在 Automator 中这样做吗?或者我只是在文本键盘上做?如果我想将它捆绑为一个应用程序,我可以使用 Automator 创建一个新的应用程序吗?那是一样的吗?如果是这样,哪些文件/文件夹和/或操作包含在他的工作流程中?我假设 jar 本身、类、清单和 swt.jar?然后保存后,如何编辑 plist 文件以指定我想在原始帖子中执行的操作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    相关资源
    最近更新 更多