launchservicesd:secTaskLoadEntitlements在加载java时失败错误= 22

时间:2016-08-23 03:14:09

标签: java python macos osx-elcapitan pyjnius

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

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图标。 java icon。当我运行python脚本时,我在日志中收到此错误/消息。

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

有谁可以说这个错误意味着什么(或者码头中挂起/ java图标的原因)?我想调试这个挂起的原因,但是欢迎任何调试此错误的帮助。

1 个答案:

答案 0 :(得分:0)

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

  1. 除非使用-Djava.awt.headless=true启动JVM,否则当正在运行的程序首次访问其中的类或方法时,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

    如果您只是想出现一个更好的图标

  2. ,您实际上会通过-Xdock:icon as described here对停靠栏中显示的图标产生影响。
  3. 运行上面的第二个片段,其中包含JFrame的片段,揭示了停靠码图标的原因的第二部分:由于AWT-EventQueue-0线程负责调度GUI事件发送到程序中所有已注册的事件处理程序,当程序完成时,JVM不会退出,因为只有主线程退出,而不是GUI线程。

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

  4. 解决你的问题"挂起"问题,通过System.exit(0)强行关闭JVM可能会很好地满足您的需求。我认为jnius语法类似于:

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

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