2016-08-23 396 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做。