![]() |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Compiling Python Source to Real Java Classes - jpythoncThe previous section describes how Python classes can be created that subclass from Java classes. This works very well when you want to pass a Python class into Java from JPython. This is not adequate for building real Java ".class" files that implement a Java class and can be passed directly to Java programs. This sort of functionality is required to build applets, servlets, or JavaBeans in JPython that can be used exactly like their Java equivalents. It is also very valuable for users who wish to subclass Python classes in Java. In order to build a real java class from a Python class, you will use the jpythonc tool. A script called "jpythonc" should have been installed in the JPython installation directory when you installed the package. If it was not, it can be invoked as follows: "jpython Tools\jpythonc\jpythonc.py". JPython 1.1 has a new version of the jpythonc tool, which generates actual Java source code, and then invokes a Java compiler over this source code to create the .class files. Thus, you will need access to a Java compiler in order to use jpythonc. It is recommended that you use Sun's standard javac compiler, or IBM's excellent jikes compiler. Specifically, the Microsoft SDK jvc compiler is not recommended. Invoke jpythonc like this: jpythonc [options] [module]* Options are given in the table below. Note that jpythonc now uses the standard Python getopt module, meaning that both long and short forms of the options are available. The old option names still work, and are described below, but noted as deprecated and will be removed in a future version.
The Python module must contain a Python class with the same name as the module, and that Python class must subclass exactly one Java class or interface. The real Java class created will be a subclass of whatever Java class is subclassed. |
On my Windows NT machine, I used the following command to create the file appletdemo.jar (containing all of the applet demos on the web site, as well as the core JPython libraries):
c:\jpython\Demo\applet> jpythonc -core -deep -jar appletdemo.jar *.py
To generate a skeleton class to allow a Python class to be used as java.awt.Component in a Java gui program, I used the following command:
c:\jpython\Demo\javaclasses> jpythonc Graph.py
To generate a JPython-based bean I do the following:
c:\jpython\Demo\bean> jpythonc -deep -bean f2c.jar conversion.FahrenheitToCelsius
To use this with SUN's BDK, I do the following (the important steps are to make the bean and the JPython libraries known to the tool).
You should now be able to access the FahrenheitToCelsius bean from SUN's BeanBox (or other Bean-aware tool).