网站首页 > java教程 正文
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:zhaoweikid
jython是python的java版,他和c版本的python相比,它的优势是:可以编译为java的class文件被java程序使用,可以被java程序嵌入,可以使用java的类库。但目前jython的版本一直比较低,开发并不是很活跃,现在的最新版本是jython2.2。
PS: 如果你想学Python没有最新资料,可以复制下方链接打开自行获取:http://note.youdao.com/noteshare?id=a3a533247e4c084a72c9ae88c271e3d1
这里我以一个简单的程序作为示例来看看怎么把python程序编译为java的jar包。注意的是:并不是所有的python程序都能用jython来编译,因为jython的版本滞后于python,且python的一些库jython是不支持的(这些主要是c/c++写的库)。jython可以到http://www.jython.org去下载。
下面就是一段代码,这个是jython带的demo里的,在jython22/Demo/swing下,文件名叫TreeDemo.py :
data = {
'PyObject': {
'PyInteger':None,
'PyFloat':None,
'PyComplex':None,
'PySequence': {
'PyArray':None,
'PyList':None,
'PyTuple':None,
'PyString':None,
},
'PyClass': {
'PyJavaClass':None,
},
},
'sys':None,
'Py':None,
'PyException':None,
'__builtin__':None,
'ThreadState':None,
}
from pawt import swing
Node = swing.tree.DefaultMutableTreeNode
def addNode(tree, key, value):
node = Node(key)
tree.add(node)
if value is not None:
addLeaves(node, value.items())
def addLeaves(node, items):
items.sort()
for key, value in items:
addNode(node, key, value)
def makeTree(name, data):
tree = Node('A Few JPython Classes')
addLeaves(tree, data.items())
return tree
if __name__ == '__main__':
tree = makeTree('Some JPython Classes', data)
swing.test(swing.JScrollPane(swing.JTree(tree)))
如果直接运行这段程序,可以出来java的swing的一个显示树型结构的界面。当然执行的时候要用jython而不是python,最好是在命令行里输入:
jython TreeDemo.py
来执行。
下面看看怎么编译,首先要确认你有jdk, 如果是jdk 1.5以上的版本,这样就不用设置CLASSPATH环境变量了。注意:jdk 1.4版本是要设置CLASSPATH的!就是设置CLASSPATH=.;C:/j2sdk1.4.1_03/lib;C:/j2sdk1.4.1_03/lib/tools.jar; 可能jdk1.5在某些情况下有一些问题,1.4则基本不会。编译的过程都在命令行中进行。
jythonc -a -C "C:/Program Files/Java/jdk1.5.0_06/bin/javac.exe" -jar tree.jar TreeDemo.py
这样就会生成一个叫 tree.jar 的包,以及一个叫jpywork的目录,这个目录是编译过程用了的,编译完了可以删除。执行
java -jar tree.jar
就可以运行这个程序了。
这里我以一个jython才能执行的程序为例介绍的,其实一个普通的只使用标准库的python程序也是可以的。有什么不懂的可以关注我,留言哦!
猜你喜欢
- 2024-11-07 HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期
- 2024-11-07 Python 3 学习笔记:目录&文件处理(二)
- 2024-11-07 一次生产事故,动态磁盘删除卷分区丢失,数据恢复案例实战
- 2024-11-07 【每日一学】Java CRUD操作大揭秘:学会创建、读取、更新和删除
- 2024-11-07 java实现对zip文件的压缩(java实现zip解压缩)
- 2024-11-07 一个骚命令防止你的文件被误删除(一个骚命令防止你的文件被误删除了怎么办)
- 2024-11-07 深入理解Java内存与垃圾回收调优(java内存机制和垃圾回收算法)
- 2024-11-07 Java之路-File类(java file类)
- 2024-11-07 Java使用aspose删除pdf中不需要的图片
- 2024-11-07 java File类用法(java中的file是什么)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)