为了账号安全,请及时绑定邮箱和手机立即绑定

python工具库介绍-jpype:python到java桥

标签:
Python

简介

Python 作为一种灵活的软件开发语言在当今被广泛使用。在软件开发过程中,有时需要在 Python 项目中利用既有的 Java 代码,已达到节省时间和开发成本的目的。因此,找到一个 Python 代码调用 Java 代码的桥梁是非常有意义的。 JPype 就是这样的一个工具,利用它可以使 Python 程序方便的调用 Java 代码。

JPype使Python可以完全访问Java类库。Jython/JPython重新实现了Python,JPype则提供了两个虚拟机的接口。JPype可以在JSP,Servlet、RMI服务器和IDE插件都方面用Python代替Java。

缺陷:
package之外的类(在<default>中)不能被导入。
不能重启JVM。
不能处理依赖当前类的方法。


快速入门

  • 安装

# pip3 install jpype1Collecting jpype1
  Downloading JPype1-0.6.2.tar.gz (147kB)    100% |████████████████████████████████| 153kB 519kB/s 
Building wheels for collected packages: jpype1
  Running setup.py bdist_wheel for jpype1 ... done
  Stored in directory: /root/.cache/pip/wheels/8e/f3/e6/a1250b8e8d2bd105f4dd21b1dc801dbcf5d815592443bfe741
Successfully built jpype1
Installing collected packages: jpype1
Successfully installed jpype1-0.6.2

线程的启动需要增加: jpype.attachThreadToJVM(),可以使用isThreadAttachedToJVM() 检查。使用java线程要注意这里不支持回调。基于OS的线程通常问题不大,但是仿真线程,比如microthread,在java中实际为一个线程。

java的synchronized同步,jpype用synchronized(O)实现,返回monitor对象。monitor为GCd时会破坏锁。

Jpype使用JNI,它并不是最有效的接口。并且Jpype桥接两个完全不同的实时环境,需要来回转换,性能一般。

在java中使用来区分内部类和外部类。例如内部类Foo定义在Bar内部,在java中称为Bar.Foo,但此时其真正的名字为BarFoo。
由于上述名字变异,你不能使用标准的包访问方式来获取它们。使用JPackage的方法getclass来载入。
非静态内部类不能从python代码中实例化。但是可以完全没有问题地使用从java代码中接受到的实例。

演示:

$ ipython3
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from jpype import *

In [2]: startJVM(getDefaultJVMPath(), "-ea")

In [3]: java.lang.System.out.println("hello world")
hello world

In [4]: shutdownJVM()
JVM activity report     :
    classes loaded       : 31JVM has been shutdown



作者:python作业AI毕业设计
链接:https://www.jianshu.com/p/156e6f5ccc21


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消