|
Hello to all, Playin with JavaFX + Jython and tried to convert the code that appears on the following location: http://download.oracle.com/javafx/2.0/charts/pie-chart.htm#CIHFDADD So far the original Java code works well but the following Jython script: #!/usr/bin/env jython import sys from javafx.application import Application from javafx.collections import FXCollections from javafx.collections import ObservableList from javafx.scene import Scene from javafx.stage import Stage from javafx.scene.chart import PieChart from javafx.scene import Group class PieChartSample(Application): def __init__(self): pass def start(self, stage): scene = Scene(Group()) stage.setTitle("Imported Fruits") stage.setWidth(500) stage.setHeight(500) pieChartData = FXCollections.observableArrayList( PieChart.Data("Grapefruit", 13), PieChart.Data("Oranges", 25), PieChart.Data("Plums", 10), PieChart.Data("Pears", 22), PieChart.Data("Apples", 30)) chart = PieChart(pieChartData) chart.setTitle("Imported Fruits") scene.getRoot().getChildren().add(chart) stage.setScene(scene) stage.show() if __name__ == "__main__": PieChartSample().launch(sys.argv[1:]) Gives me the following exception: ./piechart.py *sys-package-mgr*: can't create package cache dir, '/Users/Shared/jython2.5.2/cachedir/packages' Traceback (most recent call last): File "./piechart.py", line 36, in <module> PieChartSample().launch(sys.argv[1:]) at javafx.application.Application.launch(Application.java:186) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) java.lang.RuntimeException: java.lang.RuntimeException: Error: class sun.reflect.NativeMethodAccessorImpl is not a subclass of javafx.application.Application Does anybody had a similar issue while trying to create JavaFX applications using Jython? Somehow Jython doesn't think I overrode the start method on my class. Thanks in
advance, --José ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2dcopy1 _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
|
2011/10/9 Jose Vicente Nunez Zuleta <[hidden email]> Pierre Thibault
Hello José, I think "stage" parameter in the "start" method is a simple object. We can verify this assumption by using Java reflexion. If it is the case I believe you'll have to create a Java class to wrap PieChartSample. I don't know how to specify the type of a method parameter in Jython. I don't know if it is possible. ![]() Python Developer/Développeur Python Montréal, QC ![]() ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2dcopy1 _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
|
In reply to this post by Jose Vicente Nunez Zuleta-2
[Jose]
> class PieChartSample(Application): > > def __init__(self): > pass Should not explicitly invoke the superclass constructor here? Since your constructor does nothing, perhaps just drop it so that PieChartSimple() falls through to the java superclass constructor? Alan. ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2dcopy1 _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
|
Hello Alan, I removed the useles constructor but no luck, same error. Jose Vicente Nunez Zuleta RHCE#807302513906520 , SJCDJ, SJCPJ, SCWCD From: Alan Kennedy <[hidden email]> To: Jose Vicente Nunez Zuleta <[hidden email]> Cc: "[hidden email]" <[hidden email]> Sent: Monday, October 10, 2011 2:34 PM Subject: Re: [Jython-users] Anybody playing with JavaFX + Jython [Jose] > class PieChartSample(Application): > > def __init__(self): > pass Should not explicitly invoke the superclass constructor here? Since your constructor does nothing, perhaps just drop it so that PieChartSimple() falls through to the java superclass constructor? Alan. ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2d-oct _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
|
In reply to this post by Pierre Thibault-3
Hmm, that sucks pretty bad as it defeats the whole purpose of using Jython here :-). Can you explain what you mean by a 'simple' object? The stage variable id of type 'Stage' and my understanding is than the JVM keeps track of the type for you. Also there is only one abstract method called start in the Java class, so I don't think is an overriding issue with Jython. From: Pierre Thibault <[hidden email]> To: [hidden email] Sent: Monday, October 10, 2011 11:02 AM Subject: Re: [Jython-users] Anybody playing with JavaFX + Jython 2011/10/9 Jose Vicente Nunez Zuleta <[hidden email]> Pierre Thibault
Hello José, I think "stage" parameter in the "start" method is a simple object. We can verify this assumption by using Java reflexion. If it is the case I believe you'll have to create a Java class to wrap PieChartSample. I don't know how to specify the type of a method parameter in Jython. I don't know if it is possible. Python Developer/Développeur Python Montréal, QC ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2dcopy1 _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2d-oct _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
|
Jose and All JavaFX + Jython enthusiasts: Here is a version of the code that works: from javafx.application import Application from javafx.collections import FXCollections from javafx.collections import ObservableList from javafx.stage import Stage from javafx.scene import Scene from javafx.scene import Group from javafx.scene.chart import PieChart class PieChartSample(Application): def __init__(self): pass def start(self, stage): scene = Scene(Group()) stage.title = "Imported Fruits" stage.width = 500 stage.height = 500 pieChartData = FXCollections.observableArrayList( PieChart.Data("Grapefruit", 13), PieChart.Data("Oranges", 25), PieChart.Data("Plums", 10), PieChart.Data("Pears", 22), PieChart.Data("Apples", 30)) chart = PieChart(pieChartData) chart.title = "Imported Fruits" scene.root.children.add(chart) stage.scene = scene stage.show() if __name__ == "__main__": Application.launch(PieChartSample().class, []) The trick is with the last line of code that launches the application, which is accomplished with the javafx.application.Application.launch() method. There are two overloaded versions of this method: public static void launch(String[] args); and public static void launch(Class<? extends Application> appClass, String[] args); The first version must be called from a method in a class that extends Application, which is not the case in the above python code. So we have to use the second version. The idiom for using the first version of launch() in Java is the following: public class Foo extends Application { @Override public void start(Stage stage) { // build the scene graph and show it } public static void main(String[] args) { Application.launch(args); } } The idiom for using the second version of launch() in Java is the following: public class Foo extends Application { @Override public void start(Stage stage) { // build the scene graph and show it } } public class Launcher { public static void main(String[] args) { Application.launch(Foo.class, args); } } There is an inefficiency in my python code in that I instantiated PieChartSample once only to get its class. I think there is a better way of doing it but can't think of how at the moment. -- Weiqi Gao On Oct 10, 2011, at 8:30 PM, Jose Vicente Nunez Zuleta wrote:
------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2d-oct _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
|
Hello Gao, You nailed it!. The following line fixes the problem: if __name__ == "__main__": Application.launch(PieChartSample().class, sys.argv[1:]) Thanks for your detailed explanation too. Jose Vicente Nunez Zuleta From: Weiqi Gao <[hidden email]> To: Jose Vicente Nunez Zuleta <[hidden email]> Cc: Pierre Thibault <[hidden email]>; "[hidden email]" <[hidden email]> Sent: Tuesday, October 11, 2011 1:45 AM Subject: Re: [Jython-users] Anybody playing with JavaFX + Jython Jose and All JavaFX + Jython enthusiasts: Here is a version of the code that works: from javafx.application import Application from javafx.collections import FXCollections from javafx.collections import ObservableList from javafx.stage import Stage from javafx.scene import Scene from javafx.scene import Group from javafx.scene.chart import PieChart class PieChartSample(Application): def __init__(self): pass def start(self, stage): scene = Scene(Group()) stage.title = "Imported Fruits" stage.width = 500 stage.height = 500
pieChartData = FXCollections.observableArrayList( PieChart.Data("Grapefruit", 13), PieChart.Data("Oranges", 25), PieChart.Data("Plums", 10), PieChart.Data("Pears", 22), PieChart.Data("Apples", 30)) chart = PieChart(pieChartData) chart.title = "Imported Fruits" scene.root.children.add(chart) stage.scene = scene stage.show() if __name__ == "__main__": Application.launch(PieChartSample().class, []) The trick is with the last line of code that launches the application, which is accomplished with the javafx.application.Application.launch() method. There are two overloaded versions of this
method: public static void launch(String[] args); and public static void launch(Class<? extends Application> appClass, String[] args); The first version must be called from a method in a class that extends Application, which is not the case in the above python code. So we have to use the second version. The idiom for using the first version of launch() in Java is the following: public class Foo extends Application { @Override public void start(Stage stage) { // build the scene graph and show it } public static void main(String[] args) { Application.launch(args);
} } The idiom for using the second version of launch() in Java is the following: public class Foo extends Application { @Override public void start(Stage stage) { // build the scene graph and show it } } public class Launcher { public static void main(String[] args) { Application.launch(Foo.class, args); } } There is an inefficiency in my python code in that I instantiated PieChartSample once only to get its class. I think there is a better way of doing it but can't think of how at the moment. -- Weiqi Gao http://www.weiqigao.com/blog/ On Oct 10, 2011, at 8:30 PM, Jose Vicente Nunez Zuleta wrote:
------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2d-oct _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
|
Hello,
Where is the Java doc for JavaFX on the web? ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2d-oct _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
|
http://download.oracle.com/javafx/2.0/api/index.html
On Oct 11, 2011, at 8:24 AM, Pierre Thibault wrote: > Hello, > > Where is the Java doc for JavaFX on the web? > ------------------------------------------------------------------------------ > All the data continuously generated in your IT infrastructure contains a > definitive record of customers, application performance, security > threats, fraudulent activity and more. Splunk takes this data and makes > sense of it. Business sense. IT sense. Common sense. > http://p.sf.net/sfu/splunk-d2d-oct_______________________________________________ > Jython-users mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/jython-users ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2d-oct _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
|
Thank you Weiqi.
2011/10/11 Weiqi Gao <[hidden email]> http://download.oracle.com/javafx/2.0/api/index.html Pierre Thibault ![]() Python Developer/Développeur Python Montréal, QC ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2d-oct _______________________________________________ Jython-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/jython-users |
| Powered by Nabble | Edit this page |
