【问题标题】:Runtime.getRuntime() restart mac Java IMRuntime.getRuntime() 重启 mac Java IM
【发布时间】:2016-12-17 02:24:37
【问题描述】:

我的操作系统是 MAC OS 10.11.3。

我使用Spark作为我们的IM(即时通讯),但是当IM注销时,IM报错,说:

java.io.IOException:无法运行程序“open”:错误=2,没有这样的文件或目录。

但是当Eclipse运行时,它运行良好,当我将它打包成一个mac包并安装它并运行它时,点击“退出”按钮,它会抛出错误。

在程序中,当我注销时,我启动了一个新的 IM,同时,我杀死了旧的 IM 应用程序。

另外,在终端里,不管我跑多少次“open -a Spark”,都只是打开同一个IM,

来源如下:

public boolean restartApplicationWithScript() {
    String command = null;
    try {
        if (Spark.isMac()) {
            command = "open -a " + Default.getString(Default.SHORT_NAME);
        }

        String commands[] = {"open", "/Applications/Spark.app"}; 
        Runtime.getRuntime().exec(commands);

        System.exit(0);
        return true;
    } catch (IOException e) {
        Log.error("Error trying to restart application with script", e);
        return false;
    }
}

【问题讨论】:

  • 变量command的作用是什么?你永远不会将它用于任何事情。
  • 亲爱的安德烈亚斯,谢谢,是的,我只是测试了打开命令,但它不起作用,你有什么建议吗?

标签: java macos runtime-error runtime.exec


【解决方案1】:

异常似乎是说找不到open 命令。这似乎有点奇怪,因为它是一个标准的 MacOS 命令。所以我怀疑找不到的原因是它不在PATH上。

  • 尝试为open 命令提供绝对路径名。运行 which open 应该会告诉你它是什么。
  • 如果open 是MacOS 内置的shell,那么您需要创建一个子shell 来运行该命令。

【讨论】:

  • 亲爱的 Stephen C,非常感谢,我尝试使用绝对路径名,但不起作用,以及我如何创建子 shell 来运行命令,
  • 在你这样做之前,你有没有检查 open 是否是一个内置的shell。如果您还没有检查,那么您可能是在浪费时间在子 shell 中运行命令。
  • 亲爱的 Stephen C,感谢您的回复,我检查了 open 不是内置的 shell,在 shell 中使用了“type open”,它给了我一个“open is hashed (/usr/ bin/open)”,所以我认为它不是内置命令,因为我“键入 cd”响应了“cd 是内置的 shell”,所以,接下来我该怎么做,我非常感谢您的帮助
  • 我在终端中使用了“启用打开”,它响应“-bash:启用:打开:不是内置的shell”,我确保它不是内置命令,谢谢
  • 在那种情况下我很难过。 (而且我没有 Mac 来运行你的代码。)
【解决方案2】:

谢谢大家,我分两步解决了: 1, cmdline = { "open", "-na", "Microsoft Excel" };这添加一个“n”,否则,它会打开同一个应用程序。 2,chmod -R 777 youAppPath,如果不这样做,app不能发出命令

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2014-01-05
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多