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的主要内容,如果未能解决你的问题,请参考以下文章