转载链接: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. Nginx教程(二) Nginx虚拟主机配置

    Nginx教程(二) Nginx虚拟主机配置 1 虚拟主机管理 1.1 Nginx管理虚拟主机 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主 ...

  2. BattleInfo

    private Dictionary<string, UILabel> mLabels; private Dictionary<string,UISprite> mSprite ...

  3. 纯css实现多标签浮动居中(任意个数)

    在做的一个网页上有一块要用浮动标签,具体就是网页底部有未知数量,未知尺寸的元素要水平居中,有点类似于分页器. 首先,我们先新建一个容器con,就是标签的爸爸,用来控制标签在页面的位置,.father{ ...

  4. 【Netty】EventLoop和线程模型

    一.前言 在学习了ChannelHandler和ChannelPipeline的有关细节后,接着学习Netty的EventLoop和线程模型. 二.EventLoop和线程模型 2.1. 线程模型 线 ...

  5. RavenDB FS 安装使用 介绍

    前言 最近项目因为要存储图片和文件,折腾了RavenDB,使用RavenDB的FS系统统一管理图片和文件. 安装 RavenDB 的FS文件系统,需要用到windows的远程差分压缩功能: 安装好之后 ...

  6. js实现分页

    <html> <head> <meta charset='utf-8'> <script type="text/javascript" s ...

  7. 关于微信小程序拒绝授权后,重新授权并获取用户信息

    最近公司做了一些有关微信小程序的项目,涉及到授权获取用户基本信息,但是在拒绝授权之后就不会再出现授权窗口: 看网上也有很多人遇到了同样的问题,所以记录下来我的处理方法,供大家和自己学习和记录: 当调用 ...

  8. 搭建eureka服务

    1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  9. 在Intellij Idea中使用JSTL标签库

    习惯了eclipse和myeclipse开发的我们总是依赖于系统的插件,而当我想当然的以为IntelliJ IDEA 的jstl 的使用应该和myeclispe一样,当时使用起来却到处碰壁,完全找不到 ...

  10. android进入adb shell步骤及修改sqlite数据库文件的权限

    1 准备工作 (1)将adb.exe从  \Sdk\platform-tools目录下移动到 \Sdk\tools目录下(主要是看emulator这几个文件在哪个文件夹就把adb.exe移动到哪个文件 ...