设为首页 收藏本站
查看: 801|回复: 0

[经验分享] python调用Java-JPype使用介绍(二)(转)

[复制链接]

尚未签到

发表于 2017-5-5 09:16:41 | 显示全部楼层 |阅读模式
清单 8. Java 类定义

package src.com.ibm.javaproject;

public class JavaClass {
    public String value = "";

    /**
     * Creates a new JavaClass object.
     *
     * @param value
     */
public JavaClass(String value) {
        this.value = value;
    }

    public String getValue() {
        return this.value;
    }

    public void setValue(String val) {
        this.value = val;
    }
}


对于上述的 Java 类,以下的代码介绍了如何在 Python 中构造并且使用相应的对象。首先是获得对应 Java 类:

清单 9. 获得对应 Java 类

import jpype
javaClass = jpype.JClass('src.com.ibm.javaproject.JavaClass')


调用 Java 类的构造函数生成实例:

清单 10. 调用 Java 类的构造函数生成实例

value = “ oldvalue ”
javaInstance = javaClass(value)


调用 Java 方法:

清单 11. 调用 Java 方法

print javaInstance.getValue()
javaInstance.setValue( “ newvalue ” )
print javaInstance.getValue()


运行结果:

清单 12. Python 代码的运行结果

oldvalue
newvalue


Java exception 错误处理

异常处理是程序编写者们必须考虑的问题,在使用 JPype 的过程中,所有的 Java exception 将被自动转换成 jpype.JavaException 。以下是 Jpype 处理 Java exception 的示例:

清单 13. 处理 Java exception

from jpype import JavaException
try:
    #Code that throws a java.lang.RuntimeException
except JavaException, ex:
    if JavaException.javaClass() is java.lang.RuntimeException:
        print "Caught the runtime exception : ", JavaException.message()
        print JavaException.stackTrace()





应用实例(Password Cipher)

下面我们用一个简单的应用实例来说明如何在 python 代码中调用 Java 类。

Java 类定义

假设我们已用 Java 语言编写了一个类:PasswordCipher,该类的功能是对字符串进行加密和解密。它提供了一个对外的接口 run() 函数,定义如下 :

清单 14. PasswordCipher 定义

public class PasswordCipher {
    ……
    public static String run(String action, String para){
    ……
    }
……
}


run 函数接收两个参数,第一个参数代表所要进行的操作,传入“ encrypt ”表示对第二个参数 para 做加密操作,返回加密结果。如果第一个参数为“ decrypt ”则返回对 para 的解密操作的结果。在 run 函数中有可能会有异常抛出。

Python 代码

我们先将 PasswordCipher.class 存放在目录“ F:\test\cipher ”下,然后用 python 语言编写下面的代码:

清单 15. Python 代码

import jpype
from jpype import JavaException

jvmPath = jpype.getDefaultJVMPath()           #the path of jvm.dll
classpath = "F:\\test\\cipher"                 #the path of PasswordCipher.class
jvmArg = "-Djava.class.path=" + classpath
if not jpype.isJVMStarted():                    #test whether the JVM is started
    jpype.startJVM(jvmPath,jvmArg)             #start JVM
javaClass = jpype.JClass("PasswordCipher")   #create the Java class
try:
    testString = "congratulations"
    print "original string is : ", testString
    #call the run function of Java class
    encryptedString = javaClass.run("encrypt", testString)
    print "encrypted string is : ", encryptedString

    #call the run function of Java class

    decryptedString = javaClass.run("decrypt", encryptedString)
    print "decryped string is : ", decryptedString
except JavaException, ex:
    print "Caught exception : ", JavaException.message()
    print JavaException.stackTrace()
except:
    print "Unknown Error"
finally:
    jpype.shutdownJVM()        #shut down JVM


运行该程序后得到的结果:

清单 16. 该程序运行的结果是:

original string is :  congratulations
encrypted string is :  B0CL+niNYwJLgx/9tisAcQ==
decryped string is :  congratulations




参考资料

    访问 JPype 的主页,了解更多 JPype 的内容。
    访问 developerWorks 开放源码专区,获得丰富的 how-to 信息、工具和项目更新,帮助您用开放源码技术进行开发,并与 IBM 产品结合使用。
    有关 Python 更多信息,请参考 developerWorks 上 Linux 专区的 Python 专题。



作者简介



任亮,IBM 中国系统与技术实验室,软件工程师,2004 年获得上海交通大学计算机学士学位并于 2008 年加入 IBM,目前主要从事 IBM 系统管理软件的研发。周怿,IBM 中国系统与技术实验室,软件工程师,2006 年获得浙江大学计算机硕士学位并于 2007 年加入 IBM,目前主要从事 IBM 系统管理软件的研发。



周怿,IBM 中国系统与技术实验室,软件工程师,2006 年获得浙江大学计算机硕士学位并于 2007 年加入 IBM,目前主要从事 IBM 系统管理软件的研发。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373245-1-1.html 上篇帖子: Python中数据库配置错误提示信息. 下篇帖子: python初体验(1)——基础篇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表