← Back to team overview

sikuli-driver team mailing list archive

[Question #293629]: Imports not working when executing Sikuli/Jython from Java via ObjectFactory

 

New question #293629 on Sikuli:
https://answers.launchpad.net/sikuli/+question/293629

So, I'm trying to put a Swing GUI in front of my Sikuli script. I've got the basic script working (without the GUI) in Eclipse. With the GUI added, I've defined a Java interface for the script, and on clicking a button in the GUI:

			public void mouseClicked(MouseEvent arg0) {
		        JythonFactory jf = JythonFactory.getInstance();
		        EpicPolicyPusherType eType = (EpicPolicyPusherType) jf.getJythonObject(
		                               "jyinterface.interfaces.EpicPolicyPusherType", 
		                               "src/EpicPolicyPusher.py");
			}

The object factory is defined as:

   public static Object getJythonObject(String interfaceName,
                                        String pathToJythonModule){
              
       Object javaInt = null;
       PythonInterpreter interpreter = new PythonInterpreter();
       interpreter.execfile(pathToJythonModule);
       ........

There is further code in the object factory (I copied it from a tutorial) but it's not relevant at this point because we're not getting passed the interpreter.execfile command.

The script import Sikuli at the top, as instructed here:https://github.com/RaiMan/SikuliX-2014/wiki/Usage-in-Java-programming

     import time, datetime
     import org.sikuli.script.SikulixForJython
     from sikuli import *

For the record, I've added the sikulixapi.jar library to both the Java build path and the PYTHONPATH. Jython version BTW is 2.7. %SIKULI_HOME% is pointing to c:\sikulix.

Anyway, when I try to run, I get the GUI. I click the button. The object factory instantiates the script object, which tries to initialize, and throws:

Exception in thread "AWT-EventQueue-0" Traceback (most recent call last):
  File "src/EpicPolicyPusher.py", line 20, in <module>
    from sikuli import *
  File "C:\SikuliX\sikulixapi.jar\Lib\sikuli\__init__.py", line 6, in <module>
  File "C:\SikuliX\sikulixapi.jar\Lib\sikuli\Sikuli.py", line 32, in <module>
java.lang.ExceptionInInitializerError
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.python.core.Py.loadAndInitClass(Py.java:991)
	at org.python.core.Py.findClassInternal(Py.java:926)
	at org.python.core.Py.findClassEx(Py.java:977)
	at org.python.core.packagecache.SysPackageManager.findClass(SysPackageManager.java:133)
	at org.python.core.packagecache.PackageManager.findClass(PackageManager.java:33)
	at org.python.core.packagecache.SysPackageManager.findClass(SysPackageManager.java:122)
	at org.python.core.PyJavaPackage.__findattr_ex__(PyJavaPackage.java:134)
	at org.python.core.PyObject.__findattr__(PyObject.java:946)
	at org.python.core.imp.importFromAs(imp.java:1160)
	at org.python.core.imp.importFrom(imp.java:1132)
	at sikuli.Sikuli$py.f$0(C:\SikuliX\sikulixapi.jar\Lib\sikuli\Sikuli.py:547)
	at sikuli.Sikuli$py.call_function(C:\SikuliX\sikulixapi.jar\Lib\sikuli\Sikuli.py)
	at org.python.core.PyTableCode.call(PyTableCode.java:167)
	at org.python.core.PyCode.call(PyCode.java:18)
	at org.python.core.imp.createFromCode(imp.java:436)
	at org.python.core.util.importer.importer_load_module(importer.java:109)
	at org.python.modules.zipimport.zipimporter.zipimporter_load_module(zipimporter.java:163)
	at org.python.modules.zipimport.zipimporter$zipimporter_load_module_exposer.__call__(Unknown Source)
	at org.python.core.PyBuiltinMethodNarrow.__call__(PyBuiltinMethodNarrow.java:46)
	at org.python.core.imp.loadFromLoader(imp.java:587)
	at org.python.core.imp.find_module(imp.java:537)
	at org.python.core.PyModule.impAttr(PyModule.java:106)
	at org.python.core.imp.import_next(imp.java:842)
	at org.python.core.imp.import_module_level(imp.java:959)
	at org.python.core.imp.importName(imp.java:1062)
	at org.python.core.ImportFunction.__call__(__builtin__.java:1280)
	at org.python.core.PyObject.__call__(PyObject.java:431)
	at org.python.core.__builtin__.__import__(__builtin__.java:1232)
	at org.python.core.imp.importAll(imp.java:1182)
	at sikuli$py.f$0(C:\SikuliX\sikulixapi.jar\Lib\sikuli\__init__.py:6)
	at sikuli$py.call_function(C:\SikuliX\sikulixapi.jar\Lib\sikuli\__init__.py)
	at org.python.core.PyTableCode.call(PyTableCode.java:167)
	at org.python.core.PyCode.call(PyCode.java:18)
	at org.python.core.imp.createFromCode(imp.java:436)
	at org.python.core.util.importer.importer_load_module(importer.java:109)
	at org.python.modules.zipimport.zipimporter.zipimporter_load_module(zipimporter.java:163)
	at org.python.modules.zipimport.zipimporter$zipimporter_load_module_exposer.__call__(Unknown Source)
	at org.python.core.PyBuiltinMethodNarrow.__call__(PyBuiltinMethodNarrow.java:46)
	at org.python.core.imp.loadFromLoader(imp.java:587)
	at org.python.core.imp.find_module(imp.java:537)
	at org.python.core.imp.import_next(imp.java:840)
	at org.python.core.imp.import_module_level(imp.java:959)
	at org.python.core.imp.importName(imp.java:1062)
	at org.python.core.ImportFunction.__call__(__builtin__.java:1280)
	at org.python.core.PyObject.__call__(PyObject.java:431)
	at org.python.core.__builtin__.__import__(__builtin__.java:1232)
	at org.python.core.imp.importAll(imp.java:1182)
	at org.python.pycode._pyx2.f$0(src/EpicPolicyPusher.py:412)
	at org.python.pycode._pyx2.call_function(src/EpicPolicyPusher.py)
	at org.python.core.PyTableCode.call(PyTableCode.java:167)
	at org.python.core.PyCode.call(PyCode.java:18)
	at org.python.core.Py.runCode(Py.java:1386)
	at org.python.core.__builtin__.execfile_flags(__builtin__.java:535)
	at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:286)
	at jyinterface.factory.JythonFactory.getJythonObject(JythonFactory.java:22)
	at PolicyMaker_UI.UpFront$2.mouseClicked(UpFront.java:362)
	at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.IllegalThreadStateException: Cannot call method from the event dispatcher thread
	at java.awt.Robot.checkNotDispatchThread(Unknown Source)
	at java.awt.Robot.waitForIdle(Unknown Source)
	at org.sikuli.script.Mouse.move(Mouse.java:345)
	at org.sikuli.script.Mouse.move(Mouse.java:318)
	at org.sikuli.script.Mouse.init(Mouse.java:59)
	at org.sikuli.script.Screen.initScreens(Screen.java:89)
	at org.sikuli.script.Screen.<clinit>(Screen.java:58)
	... 90 more
java.lang.ExceptionInInitializerError: java.lang.ExceptionInInitializerError

So, the import of standard Python/Jython modules works OK, the import of SikulixForJython works, the main "from sikuli import *" dies gruesomely.

For the record, since the named import of SikulixForJython works, I've experimented with explicit import statements, like:
     from org.sikuli.script import Region

These imports do not fail, but any attempt to use the named area of functionality e.g. "x = Region(1,1,1000,1000)"  will fail at runtime with 'variable "Region" not defined' errors.

Any assistance appreciated.

d

-- 
You received this question notification because your team Sikuli Drivers
is an answer contact for Sikuli.