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

1. 用Jython调用Java类库

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

 import org.python.core.*;

 public class Point extends PyObject
{
private int x;
private int y; public Point()
{
x = 0;
y = 0;
} public Point(int x, int y)
{
this.x = x;
this.y = y;
} public void dump()
{
System.out.printf("The position is (%s, %s)\n", x , y);
}
}

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

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

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

 #!/usr/bin/env jython

 import Point

 if __name__ == "__main__":
p = Point(2,3)
p.dump()

第三步、扩展

 import Point

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

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

2. 用Java执行Python代码

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

 import org.python.core.PyException;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter; public class SimpleEmbedded { public static void main(String[] args) throws PyException {
PythonInterpreter interp = new PythonInterpreter();
interp.exec("import sys");
interp.exec("print sys");
interp.set("a", new PyInteger(42));
interp.exec("print a");
interp.exec("x = 2 + 2");
PyObject x = interp.get("x");
System.out.println("x: " + x);
}
}
 $ javac SimpleEmbedded.java
$ java SimpleEmbedded
sys module x:
$

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

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

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

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

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

 import java.lang.Object

 class Goo(java.lang.Object):
def __init__(self):
'''public Goo()''' def dump(self):
'''@sig public void dump()'''
print 'goooooo'

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

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

 public class GooTest {
public static void main(String[] args)
{
Goo goo = new Goo();
goo.dump();
}
}

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

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

运行成功!

5. 后记

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

(转载)Jython 简单入门的更多相关文章

  1. 【转】Jython简单入门

    1. 用Jython调用Java类库 第一步.创建Java类 写一个简单的Java类,用Point来示例: import org.python.core.*; public class Point e ...

  2. GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...

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

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

  4. Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter

    前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单.所以写的没多少技术含量.把这些技术总结出来,然后一简单的方式让更多的人很好的接 ...

  5. Web Service简单入门示例

    Web Service简单入门示例     我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...

  6. Java的多线程 简单入门

    Java的多线程 简单入门 首先能够先搞清楚什么是程序.进程.线程,以及它们之间的关系: 定义: 一 程序仅仅是一组指令的有序集合.它是静态的 二 进程是具有一定独立功能的程序关于某个数据集合上的一次 ...

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

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

  8. Okio 1.9简单入门

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

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

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

随机推荐

  1. Javascript & JQuery读书笔记

    Hi All, 分享一下我学JS & JQuery的读书笔记: JS的3个不足:复杂的文档对象模型(DOM),不一致的浏览器的实现和便捷的开发,调试工具的缺乏. Jquery的选择器 a. 基 ...

  2. CefSharp使用入门

    首先这是很重要的,环境搭建: 我用的是VS2017 步骤            方法 1.            打开VS的安装管理器 2.             进入修改界面,使用C++的桌面开发 ...

  3. node使用消息队列RabbitMQ一

    基础发布和订阅 消息队列RabbitMQ使用 1 安装RabbitMQ服务器 安装erlang服务 下载地址 http://www.erlang.org/downloads 安装RabbitMQ 下载 ...

  4. matlab错误:Subscript indices must either be real positive integers or logicals.

    matlab错误:Subscript indices must either be real positive integers or logicals. 中文解释:下标索引必须是正整数类型或者逻辑类 ...

  5. 【JAVAWEB学习笔记】网上商城实战:环境搭建和完成用户模块

    网上商城实战 今日任务 完成用户模块的功能 1.1      网上商城的实战: 1.1.1    演示网上商城的功能: 1.1.2    制作目的: 灵活运用所学知识完成商城实战. 1.1.3    ...

  6. Python教程(2.5)——控制台输入

    写Python程序时,你可能希望用户与程序有所交互.例如你可能希望用户输入一些信息,这样就可以让程序的扩展性提高. 这一节我们来谈一谈Python的控制台输入. 输入字符串 Python提供一个叫做i ...

  7. HashSet集合

    HashSet特点 1.无序,不允许重复(无序指元素顺序与添加顺序不一致,每次遍历出来的位置不是恒久不变的) 2.HashSet通过调用hashCode()和equals方法来剔除重复 3.HashS ...

  8. HTML面试题

    1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? 所谓的“浏览器内核”无非指的是一个浏览器最核心的部分-“Rendering Engine”,直译叫做“渲染引擎”,我们也常称为“排版引擎 ...

  9. css的定位,relative/absolute/fixed的用法

    其实position的值有四个,static/relative/absolute/fixed,而static是默认值,不算具有有定位属性,这里就不讲了. 定位其实就是跟元素设置定位属性,然后设置其对位 ...

  10. 云计算之路-阿里云上:14:20-14:55博客后台2台服务器都CPU 100%引发的故障

    非常抱歉,今天下午14:20-14:55期间,由于同一个负载均衡中的2台服务器都出现CPU 100%问题,造成博客后台无法正常访问,由此给您带来了很大很大的麻烦,请您谅解. 博客后台是CPU消耗很低的 ...