1. 用Jython调用Java类库

第一步、创建Java类

写一个简单的Java类,用Point来示例:

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

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

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

第二步、简单调用

现在可以编写Jython来调用上面的Java类库了

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

第三步、扩展

  1. import Point
  2. class Circle(Point):
  3. def __init__(self, x, y, r):
  4. super(Circle, self).__init__(x, y)
  5. self.r = r;
  6. def dump(self):
  7. super(Circle, self).dump()
  8. print "This radius of Circle is %s" % self.r
  9. def area(self):
  10. *3.1415
  11. if __name__ == "__main__":
  12. )
  13. p.dump()
  14. ) # 但是实际上这里有问题,我不知道怎么回事,还在研究中……哪位指点下
  15. 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. public class SimpleEmbedded {
  6. public static void main(String[] args) throws PyException {
  7. PythonInterpreter interp = new PythonInterpreter();
  8. interp.exec("import sys");
  9. interp.exec("print sys");
  10. ));
  11. interp.exec("print a");
  12. interp.exec("x = 2 + 2");
  13. PyObject x = interp.get("x");
  14. System.out.println("x: " + x);
  15. }
  16. }

结果如下:

  1. $ javac SimpleEmbedded.java
  2. $ java SimpleEmbedded
  3. sys module
  4. $

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

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

  1. $ jython
  2. 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. :
  11. sys.stdout.write(chr(c))
  12. c = input.read()

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

  1. from java.applet import Applet
  2. import sys
  3. class HelloWorld(Applet):
  4. def paint(self, g):
  5. )
  6. if __name__ == '__main__':
  7. import pawt
  8. 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. class Goo(java.lang.Object):
  3. def __init__(self):
  4. '''''public Goo()'''
  5. def dump(self):
  6. '''''@sig public void dump()'''
  7. 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的好处和作用显而易见了吧。

本文转自:http://willzh.iteye.com/blog/307222

【转】Jython简单入门的更多相关文章

  1. (转载)Jython 简单入门

    转载链接:http://willzh.iteye.com/blog/307222 1. 用Jython调用Java类库 第一步.创建Java类 写一个简单的Java类,用Point来示例: impor ...

  2. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

  3. [原创]MYSQL的简单入门

    MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...

  4. Okio 1.9简单入门

    Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...

  5. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

  6. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  7. Docker 简单入门

    Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737

  8. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  9. git简单入门

    git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...

随机推荐

  1. IIS设置允许下载.exe文件解决方法

    最近很多客户使用IIS服务器,然后提示返现宝下载无法找到等无法下载的问题. 返现宝是.exe安装文件,部分服务器或主机可能无法下载. 第一.如果是自己服务器或VPS请按如下设置: 1.设置MIME,让 ...

  2. 用C++语言开发Android程序 配置开发环境

    转自:http://www.cnblogs.com/yaotong/p/3622430.html 用C++语言开发Android程序 配置开发环境   如果你是一个C++语言的死忠,你喜欢C++语言到 ...

  3. Windows下Putty连接虚拟机Ubuntu

    本文的题目是Windows下使用Putty连接虚拟机中的Ubuntu. 事实上针对这种一个问题,已经有非常多的文章.blog能够參考和学习.可是在本人的学习过程中还是遇到可非常多的问题. 特写下自己的 ...

  4. HDU1194_Beat the Spread!

    Beat the Spread! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. uIP中国的协议文件:Ch01

    uIP0.9 参考 by Doxygen 1.3.3 Tue Oct 7 15:51:00 2003 译: fishOnFly(鱼在飞) uIP-refman中文pdf下载 第1章  uIP TCP/ ...

  6. (hdu 7.1.8)Quoit Design(最低点——在n一个点,发现两点之间的最小距离)

    主题: Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...

  7. Qt 3D研究(九):尝试第二边缘检测方法

    Qt 3D研究(九):尝试第二边缘检测方法 三维应用程序,通过FBO.将3D图像渲染成纹理,然后对渲染成的纹理进行图像处理,终于显示在屏幕上的.是风格化后的图案.上一次我使用了一种普通的图像处理方法: ...

  8. JNDI 什么

    JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface).在J2EE规范中是重要的规范之中的一个,不少专家觉得,没有透彻理解JNDI的意义和作用 ...

  9. 索尼 LT26I刷机包 X.I.D 增加官方风格 GF A3.9.4 各方面完美

    ROM介 FX_GF_A系列是具有官方风格的.稳定的.流畅的.省电的.新功能体验的.最悦耳音效体验的ROM. FX_GF_A更新日志 ☆ GF_3.9.4 更新信息 ☆ 更新播放器 ☆ 更新adsp数 ...

  10. android 泰国/缅甸语/捷克较低,Contacts联系出现精神错乱之类的问题清单

    更改ContactsProvider2.java文件 public static final String SECTION_HEADING = "SUBSTR(%1$s,1,1)" ...