Jython:Java和Python代码的粘合剂

来源:互联网 发布:武汉网络与新媒体本科 编辑:程序博客网 时间:2024/04/29 21:48
1. 用Jython调用Java类库

第一步、创建Java类

写一个简单的Java类,用Point来示例:
Java代码  收藏代码
  1. import org.python.core.*; 
  2.  
  3. publicclass Pointextends PyObject 
  4.     private int x; 
  5.     private int y; 
  6.  
  7.     public Point() 
  8.     { 
  9.         x = 0
  10.         y = 0
  11.     } 
  12.  
  13.     public Point(int x,int y) 
  14.     { 
  15.         this.x = x; 
  16.         this.y = y; 
  17.     } 
  18.  
  19.     public void dump() 
  20.     { 
  21.         System.out.printf("The position is (%s, %s)\n", x , y); 
  22.     } 

编译的时候,记得把jython.jar加入类环境中:
Shell代码  收藏代码
  1. export CLASSPATH=/usr/share/java/jython.jar 
  2. javac Point.java 


第二步、简单调用

现在可以编写Jython来调用上面的Java类库了
Python代码  收藏代码
  1. #!/usr/bin/env jython 
  2.  
  3. import Point 
  4.  
  5. if __name__ =="__main__"
  6.     p = Point(2,3
  7.     p.dump() 


第三步、扩展

Python代码  收藏代码
  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里有个例子,可以拿出来炫炫

Java代码  收藏代码
  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. publicclass SimpleEmbedded { 
  7.  
  8.     public staticvoid 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.     } 

结果如下:
Shell代码  收藏代码
  1. $ javac SimpleEmbedded.java  
  2. $ java SimpleEmbedded 
  3. sys module 
  4. 42 
  5. x: 4 


3. 直接在Jython中使用Java内部的类库

如果你不介意,当然可以在Jython中交互执行Java的类库。下面是一个有点“实用”的例子:
Python代码  收藏代码
  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里有些例子也可以参考,例如:
Python代码  收藏代码
  1. from java.appletimport 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()) 

直接调用就可以了:
Shell代码  收藏代码
  1. jython HelloJython.py # 假设上面代码的文件名是HelloJython.py 
  2. java org.python.util.jython HelloJython.py # 也可以这样调用 



4. 将Python代码编译为Java类

第一步、创建Python类 Goo.py
Python代码  收藏代码
  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
Java代码  收藏代码
  1. publicclass GooTest { 
  2.     public staticvoid main(String[] args) 
  3.     { 
  4.         Goo goo = new Goo(); 
  5.         goo.dump(); 
  6.     } 


第三步、编译
终端下运行如下命令:
Python代码  收藏代码
  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的好处和作用显而易见了吧。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 房本测绘页丢了怎么办 房本测绘页信息有误怎么办 税务登记证办完没有年检怎么办 建筑施工升降机司机证怎么办 北京建筑施工证怎么办呢 模拟城市5水抽干了怎么办 ip地址错误网络无法接通怎么办 rhino模型太大打开半天怎么办 日本新干线车票丢了怎么办 房间太干燥怎么办又热 薄荷叶子全干了怎么办 水培栀子花叶子蔫了怎么办 薄荷叶叶边干了怎么办 碗莲叶子发黑腐烂怎么办 龟背叶叶子蔫了怎么办 夏天龟背竹蔫了怎么办 春羽叶子长黄斑怎么办 百合竹叶子发黄掉落怎么办 凤尾蕨叶子蔫了怎么办 绿地珊瑚蕨干了怎么办 翠云草叶子蔫了怎么办 珊瑚蕨叶子烂了怎么办 黑骨茶叶子黑斑怎么办 外场主持没有人互动怎么办 企业年报填错了怎么办 手机忘了放哪了怎么办 燃气卡车没气了怎么办 老房子拆了重建怎么办 加了差的汽油怎么办 事业单位未满5年怎么办 小学孩子不会制订学习计划怎么办 忘记提交原创怎么办百度熊掌号 计算机一级报名表填错了怎么办 离婚了不给孩子生活费怎么办 点击爱奇艺系统提示停止运行怎么办 电视机图像颜色变了怎么办 10万签约被拒怎么办 钢琴弹奏中的折指怎么办! 吉他琴头旋钮将琴头扭坏了怎么办? 1岁幼儿不爱吃饭怎么办 3岁幼儿不爱吃饭怎么办