[ https://issues.apache.org/jira/browse/PIVOT-917?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13746107#comment-13746107 ]
Jose V Nunez edited comment on PIVOT-917 at 8/21/13 4:15 PM: ------------------------------------------------------------- I tried splitting the inner class and the controller script like this: runHelloBxml.py {code} #!/usr/bin/env jython from org.apache.pivot.wtk import DesktopApplicationContext from java.lang import Runnable, Exception as Ex from javax.swing import SwingUtilities import sys,subprocess,os,re, traceback from HelloClasses import HelloBXML class Task(Runnable): def __init__(self, argv): self.argv = argv def run(self): DesktopApplicationContext.main(HelloBXML().class, self.argv) if __name__ == "__main__": try: SwingUtilities.invokeAndWait(Task(sys.argv[1:])) except: traceback.print_exc(file=sys.stderr) sys.exit(192) {code} And the inner class, now a regular class, module file: HelloClasses.py: {code} from org.apache.pivot.beans import BXMLSerializer from org.apache.pivot.wtk import Application class HelloBXML(Application): def __init__(self): self.window = None self.bxmlSerializer = BXMLSerializer() def startup(self, display, properties): self.window = self.bxmlSerializer.readObject(self.class, "hello.bxml") self.window.open(display) def shutdown(self, optional): if self.window != null: window.close() return False; def suspend(self): pass def resume(self): pass {code} Somehow JYTHON doesn't get the Class: {code} /home/jose/scripts/run_HelloBXML_py.sh /home/jose/scripts/runHelloBxml.py CLASSPATH=/home/jose/jython2.5.3/jython.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-web-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-wtk-terra-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-wtk-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-core-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-charts-2.0.3.jar:.:/home/jose/scripts + /home/jose/jython2.5.3/jython /home/jose/scripts/runHelloBxml.py java.lang.ClassNotFoundException: org.python.proxies.HelloClasses$HelloBXML$1 at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:186) at org.apache.pivot.wtk.DesktopApplicationContext.main(DesktopApplicationContext.java:606) at org.apache.pivot.wtk.DesktopApplicationContext.main(DesktopApplicationContext.java:881) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186) at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204) at org.python.core.PyObject.__call__(PyObject.java:404) at org.python.core.PyObject.__call__(PyObject.java:408) at org.python.pycode._pyx0.run$3(/home/jose/scripts/runHelloBxml.py:14) at org.python.pycode._pyx0.call_function(/home/jose/scripts/runHelloBxml.py) at org.python.core.PyTableCode.call(PyTableCode.java:165) at org.python.core.PyBaseCode.call(PyBaseCode.java:301) at org.python.core.PyBaseCode.call(PyBaseCode.java:194) at org.python.core.PyFunction.__call__(PyFunction.java:387) at org.python.core.PyMethod.instancemethod___call__(PyMethod.java:220) at org.python.core.PyMethod.__call__(PyMethod.java:211) at org.python.core.PyMethod.__call__(PyMethod.java:201) at org.python.core.PyMethod.__call__(PyMethod.java:196) at org.python.core.PyObject._jcallexc(PyObject.java:3502) at org.python.core.PyObject._jcall(PyObject.java:3534) at org.python.proxies.__main__$Task$2.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:241) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) {code} was (Author: jose.nunez-zul...@barclayscapital.com): I tried splitting the inner class and the controller script like this: runHelloBxml.py {code} #!/usr/bin/env jython from org.apache.pivot.wtk import DesktopApplicationContext from java.lang import Runnable, Exception as Ex from javax.swing import SwingUtilities import sys,subprocess,os,re, traceback import HelloBXML class Task(Runnable): def __init__(self, argv): self.argv = argv def run(self): DesktopApplicationContext.main(HelloBXML, self.argv) if __name__ == "__main__": try: SwingUtilities.invokeAndWait(Task(sys.argv[1:])) except: traceback.print_exc(file=sys.stderr) sys.exit(192) {code} And the inner class, now a regular class, HelloBXML.py: {code} from org.apache.pivot.beans import BXMLSerializer from org.apache.pivot.wtk import Application class HelloBXML(Application): def __init__(self): self.window = None self.bxmlSerializer = BXMLSerializer() def startup(self, display, properties): self.window = self.bxmlSerializer.readObject(HelloBXML, "hello.bxml") self.window.open(display) def shutdown(self, optional): if self.window != null: window.close() return False; def suspend(self): pass def resume(self): pass {code} I get a different error now, somehow JYTHON doesn't get the Class: {code} /home/jose/scripts/run_HelloBXML_py.sh /home/jose/scripts/runHelloBxml.py CLASSPATH=/home/jose/jython2.5.3/jython.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-web-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-wtk-terra-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-wtk-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-core-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-charts-2.0.3.jar:.:/home/jose/scripts + /home/jose/jython2.5.3/jython /home/jose/scripts/runHelloBxml.py Traceback (most recent call last): File "/home/jose/scripts/runHelloBxml.py", line 18, in <module> SwingUtilities.invokeAndWait(Task(sys.argv[1:])) File "/home/jose/scripts/runHelloBxml.py", line 14, in run DesktopApplicationContext.main(HelloBXML, self.argv) TypeError: main(): 1st arg can't be coerced to java.lang.Class {code} > Pivot cannot find inner classes in the CLASSPATH when invoked from Jython > ------------------------------------------------------------------------- > > Key: PIVOT-917 > URL: https://issues.apache.org/jira/browse/PIVOT-917 > Project: Pivot > Issue Type: Bug > Components: pivot-on-apache-extras > Affects Versions: 2.0.3 > Reporter: Jose V Nunez > Assignee: Sandro Martini > Labels: jython > Attachments: HelloBXML.py, run_HelloBXML.sh > > > The following is similar to the simple Hello world BXML from the PIVOT > website (http://pivot.apache.org/tutorials/hello-bxml.html, file hello.bxml > content is identical): > {code} > #!/usr/bin/env jython > from org.apache.pivot.beans import BXMLSerializer > from org.apache.pivot.collections import Map > from org.apache.pivot.wtk import Application > from org.apache.pivot.wtk import Display > from org.apache.pivot.wtk import Window > from org.apache.pivot.wtk import DesktopApplicationContext > from java.lang import Runnable, Exception as Ex > from javax.swing import SwingUtilities > import sys,subprocess,os,re, traceback > class HelloBXML(Application): > def __init__(self): > self.window = None > self.bxmlSerializer = BXMLSerializer() > def startup(self, display, properties): > self.window = self.bxmlSerializer.readObject(HelloBXML, > "hello.bxml") > self.window.open(display) > def shutdown(self, optional): > if self.window != null: > window.close() > return False; > def suspend(self): > pass > def resume(self): > pass > class Task(Runnable): > def __init__(self, argv): > self.argv = argv > def run(self): > DesktopApplicationContext.main(HelloBXML, self.argv) > if __name__ == "__main__": > try: > SwingUtilities.invokeAndWait(Task(sys.argv[1:])) > except: > traceback.print_exc(file=sys.stderr) > sys.exit(192) > {code} > Exception stack trace: > {code} > # Script file: ~/HelloBXML.py > java.lang.ClassNotFoundException: org.python.proxies.__main__$HelloBXML$1 > at java.net.URLClassLoader$1.run(URLClassLoader.java:366) > at java.net.URLClassLoader$1.run(URLClassLoader.java:355) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:354) > at java.lang.ClassLoader.loadClass(ClassLoader.java:423) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) > at java.lang.ClassLoader.loadClass(ClassLoader.java:356) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:186) > at > org.apache.pivot.wtk.DesktopApplicationContext.main(DesktopApplicationContext.java:606) > at > org.apache.pivot.wtk.DesktopApplicationContext.main(DesktopApplicationContext.java:881) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:601) > at > org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186) > at > org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204) > at org.python.core.PyObject.__call__(PyObject.java:404) > at org.python.core.PyObject.__call__(PyObject.java:408) > at org.python.pycode._pyx0.run$9(/home/jnunezzu/HelloBXML.py:39) > at org.python.pycode._pyx0.call_function(/home/jnunezzu/HelloBXML.py) > at org.python.core.PyTableCode.call(PyTableCode.java:165) > at org.python.core.PyBaseCode.call(PyBaseCode.java:301) > at org.python.core.PyBaseCode.call(PyBaseCode.java:194) > at org.python.core.PyFunction.__call__(PyFunction.java:387) > at org.python.core.PyMethod.instancemethod___call__(PyMethod.java:220) > at org.python.core.PyMethod.__call__(PyMethod.java:211) > at org.python.core.PyMethod.__call__(PyMethod.java:201) > at org.python.core.PyMethod.__call__(PyMethod.java:196) > at org.python.core.PyObject._jcallexc(PyObject.java:3502) > at org.python.core.PyObject._jcall(PyObject.java:3534) > at org.python.proxies.__main__$Task$2.run(Unknown Source) > at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:241) > at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) > at java.awt.EventQueue.access$000(EventQueue.java:101) > at java.awt.EventQueue$3.run(EventQueue.java:666) > at java.awt.EventQueue$3.run(EventQueue.java:664) > at java.security.AccessController.doPrivileged(Native Method) > at > java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) > at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) > at > java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) > at > java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) > at > java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) > at > java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) > at > java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) > at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) > {code} > I tested this with the following configuration: > {code} > Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:48:36) > [Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.7.0 > Type "help", "copyright", "credits" or "license" for more information. > java -version > java version "1.7.0" > Java(TM) SE Runtime Environment (build 1.7.0-b147) > Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode) > uname -a > Linux XXXX 2.6.18-348.3.1.el5 #1 SMP Tue Mar 5 13:19:32 EST 2013 x86_64 > x86_64 x86_64 GNU/Linux > echo $CLASSPATH > /home/jose/src/apache-pivot-2.0.3/lib/hello.bxml:/home/jose/src/apache-pivot-2.0.3/lib/pivot-wtk-terra-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-wtk-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-web-server-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-web-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-core-2.0.3.jar:/home/jose/src/apache-pivot-2.0.3/lib/pivot-charts-2.0.3.jar::. > {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira