• (转载)Jython 简单入门


    转载链接:http://willzh.iteye.com/blog/307222

    1. 用Jython调用Java类库 

    第一步、创建Java类 
    写一个简单的Java类,用Point来示例: 

     1 import org.python.core.*;
     2 
     3 public class Point extends PyObject
     4 {
     5     private int x;
     6     private int y;
     7 
     8     public Point()
     9     {
    10         x = 0;
    11         y = 0;
    12     }
    13 
    14     public Point(int x, int y)
    15     {
    16         this.x = x;
    17         this.y = y;
    18     }
    19 
    20     public void dump()
    21     {
    22         System.out.printf("The position is (%s, %s)
    ", x , y);
    23     }
    24 }

    编译的时候,记得把jython.jar加入类环境中: 

    1 export CLASSPATH=/usr/share/java/jython.jar  
    2 javac Point.java  

    第二步、简单调用 
    现在可以编写Jython来调用上面的Java类库了

    1 #!/usr/bin/env jython
    2 
    3 import Point
    4 
    5 if __name__ == "__main__":
    6     p = Point(2,3)
    7     p.dump()

    第三步、扩展 

     1 import Point
     2 
     3 class Circle(Point):
     4     def __init__(self, x, y, r):
     5         super(Circle, self).__init__(x, y)
     6         self.r = r;
     7 
     8     def dump(self):
     9         super(Circle, self).dump()
    10         print "This radius of Circle is %s" % self.r
    11 
    12     def area(self):
    13         return self.r**2*3.1415
    14 
    15 if __name__ == "__main__":
    16     p = Point(2,3)
    17     p.dump()
    18     c = Circle(2,10,3) # 但是实际上这里有问题,我不知道怎么回事,还在研究中……哪位指点下
    19     c.dump()

    虽然测试的时候有问题,但是隐约感觉到了Jython的强大,让我们欢呼一下吧 

    2. 用Java执行Python代码 

    在安装好的Demo里有个例子,可以拿出来炫炫 

     1 import org.python.core.PyException;
     2 import org.python.core.PyInteger;
     3 import org.python.core.PyObject;
     4 import org.python.util.PythonInterpreter;
     5 
     6 public class SimpleEmbedded {
     7 
     8     public static void main(String[] args) throws PyException {
     9         PythonInterpreter interp = new PythonInterpreter();
    10         interp.exec("import sys");
    11         interp.exec("print sys");
    12         interp.set("a", new PyInteger(42));
    13         interp.exec("print a");
    14         interp.exec("x = 2 + 2");
    15         PyObject x = interp.get("x");
    16         System.out.println("x: " + x);
    17     }
    18 }
    1 $ javac SimpleEmbedded.java 
    2 $ java SimpleEmbedded
    3 sys module
    4 42
    5 x: 4
    6 $

    3. 直接在Jython中使用Java内部的类库 
    如果你不介意,当然可以在Jython中交互执行Java的类库。下面是一个有点“实用”的例子: 

     1 $ jython
     2 Jython 2.2.1 on java1.6.0_0
     3 Type "copyright", "credits" or "license" for more information.
     4 >>> import sys
     5 >>> from java.net import URL
     6 >>> url = URL("http://willzh.iteye.com")
     7 >>> urlopen = url.openConnection()
     8 >>> input = urlopen.getInputStream()
     9 >>> c = input.read()
    10 >>> while c!=-1:
    11     sys.stdout.write(chr(c))
    12     c = input.read()

    安装好的Demo里有些例子也可以参考,例如: 

     1 from java.applet import Applet
     2 import sys
     3 
     4 class HelloWorld(Applet):
     5     def paint(self, g):
     6     g.drawString("Hello from Jython %s!" % sys.version, 20, 30)
     7 
     8 
     9 if __name__ == '__main__':
    10     import pawt
    11     pawt.test(HelloWorld())
    1 jython HelloJython.py # 假设上面代码的文件名是HelloJython.py
    2 java org.python.util.jython HelloJython.py # 也可以这样调用

    4. 将Python代码编译为Java类 
    第一步、创建Python类 Goo.py 

    1 import java.lang.Object
    2 
    3 class Goo(java.lang.Object):
    4     def __init__(self):
    5         '''public Goo()'''
    6 
    7     def dump(self):
    8         '''@sig public void dump()'''
    9         print 'goooooo'

    注意函数文档中的字符串,public Goo()表示告诉Java这是构造函数。 


    第二步、创建Java测试类 GooTest.java 

    1 public class GooTest {
    2     public static void main(String[] args)
    3     {
    4         Goo goo = new Goo();
    5         goo.dump();
    6     }
    7 }

    第三步、编译 
    终端下运行如下命令: 

    1 # jythonc Goo.py
    2 # javac -cp jpywork:$CLASSPATH GooTest.java # 将jpywork路径加入搜索路径中
    3 # java -cp jpywork:$CLASSPATH GooTest
    4 goooooo

    运行成功! 

    5. 后记 

    很多人说,Python比Java开发速度来的要快,但是Java也有Java不可动摇的强大之处,如此结合,想必Jython的好处和作用显而易见了吧。 

  • 相关阅读:
    根据服务端生成的WSDL文件创建客户端支持代码的三种方式
    2017第45周一java多线程创建方法
    java 分布式锁
    设计的背后
    Java中的锁概念
    maven变量
    清零成长法
    Java消息队列
    Java9的新特性
    2017第43周日
  • 原文地址:https://www.cnblogs.com/lichmama/p/4425871.html
Copyright © 2020-2023  润新知