2016-08-23 70 views
0

我想运行一个使用jnius导入jar的python程序(sikuli)。这是sikuli包的代码,当我在窗口中运行,加载在Pythonlaunchservicesd:secTaskLoadEntitlements失败错误= 22加载java时

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() 

jar文件此代码运行没有任何问题的要点。但是当我在mac中运行这个程序时,程序会在dock中挂起一个java图标。 java icon。当我运行python脚本时,我在日志中得到这个错误/消息。

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

任何人都可以说,这个错误是什么手段(或在码头挂起/ JAVA图标的原因)?我想调试这个挂起的原因,但任何帮助调试这个错误是值得欢迎的。

回答

0

有两种回答您关于停靠栏图标的问题,第一,为什么出现的第二,为什么它仍然是:

  1. 除非JVM与-Djava.awt.headless=true推出,那么JVM将初始化GUI子系统(AWT或Swing),当一个正在运行的程序首先访问其中的类或方法时。人们可以在JRE使用jjs程序平凡看到这个动作:

    此命令将运行,但将事业停靠图标:

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

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

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

    您的行为ually确实有过出现在被告席上的图标的影响力,通过-Xdock:iconas described here,如果你只是想一个更好的图标来显示

  2. 运行的是第二个片段上方,一个在它JFrame,带来光明由于AWT-EventQueue-0线程负责将GUI事件分派给程序中的所有注册事件处理程序,因此当程序完成时,JVM不会退出,因为只有主线程已退出,而不是GUI的。

    的JVM不知道你已完成了它的互动,从而将永远等待,直到你要么关闭GUI子系统或停止JVM

为您解决“挂起”的问题,强行关闭通过System.exit(0)关闭JVM,可以正常工作,满足您的需求。我推测这个jnius语法将是这样的:

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

但语法只是我的猜测,因为我没有安装我的系统上jnius做。

相关问题