launchservicesd: secTaskLoadEntitlements failed error=22 while loading java

Posted

技术标签:

【中文标题】launchservicesd: secTaskLoadEntitlements failed error=22 while loading java【英文标题】: 【发布时间】:2016-12-29 17:24:42 【问题描述】:

我正在尝试运行一个使用 jnius 导入 jar 的 python 程序 (sikuli)。这是在python中加载jar文件的sikuli包中代码的要点

import os
jarpath = "/Users/*/sikuli-api-1.0.3-standalone.jar"
os.environ['CLASSPATH'] = jarpath
from jnius import autoclass
DesktopMouse = autoclass('org.sikuli.api.robot.desktop.DesktopMouse')
aa = DesktopMouse()
gg = aa.getLocation()

当我在 Windows 中运行时,此代码运行没有任何问题。但是当我在 mac 中运行它时,程序会在 Dock 中挂起一个 java 图标。 。当我运行 python 脚本时,我在日志中收到此错误/消息。

launchservicesd: SecTaskLoadEntitlements failed error=22
appleeventsd: SecTaskLoadEntitlements failed error=22

谁能说出这个错误是什么意思(或者停靠栏中挂起/java图标的原因)?我想调试此挂起的原因,但欢迎任何有关调试此错误的帮助。

【问题讨论】:

【参考方案1】:

关于停靠图标的问题有两个答案,第一个是关于它出现的原因,第二个是关于它为什么保留的:

    除非 JVM 使用-Djava.awt.headless=true 启动,否则当正在运行的程序第一次访问其中的类或方法时,JVM 将初始化 GUI 子系统(AWT 或 Swing)。使用 JRE 中的 jjs 程序可以很容易地看到这一点:

    此命令将运行,但不会导致停靠图标:

    echo 'java.lang.System.out.println("hello")' | $JAVA_HOME/jre/bin/jjs

    此命令将运行,但导致停靠图标:

    printf 'var f = new javax.swing.JFrame("frame 1")\nf.setVisible(true)\n' | \ $JAVA_HOME/jre/bin/jjs

    如果您希望出现更好的图标,您确实可以通过 -Xdock:icon as described here 对 Dock 中出现的图标产生影响

    运行上面的第二个 sn-p,其中包含 JFrame 的那个,揭示了为什么停靠图标仍然存在的第二部分:由于负责将 GUI 事件分派给所有在您的程序中注册了事件处理程序,当您的程序完成时,JVM 不会退出,因为只有主线程已经退出,而不是 GUI 线程。

    JVM 不知道您已完成与它的交互,因此会一直等待,直到您关闭 GUI 子系统或停止 JVM

为了解决您的“挂起”问题,通过System.exit(0) 强制关闭 JVM 可能满足您的需求。我认为jnius 语法类似于:

jls = autoclass("java.lang.System")
jls.exit(0)

但该语法只是我的推测,因为我的系统上没有安装 jnius

【讨论】:

以上是关于launchservicesd: secTaskLoadEntitlements failed error=22 while loading java的主要内容,如果未能解决你的问题,请参考以下文章