`
michael_paul
  • 浏览: 175450 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

python调用Java-JPype使用介绍(二)(转)

阅读更多
清单 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 系统管理软件的研发。
分享到:
评论

相关推荐

    python调用java代码方法

    这里我们将主要关注Jpype,因为它是Python调用Java的高效且易于使用的工具。 **Jpype简介** Jpype是一个开源项目,它允许Python运行时环境直接启动和控制Java虚拟机(JVM),使得Python能够无缝地导入和使用Java类...

    python 利用 jpype 调用java代码

    Python是一种强大的脚本语言,广泛应用于数据处理、...`test1`可能是一个测试脚本,而`mython`可能是一个包含Python代码的模块,演示如何使用`jpype`调用Java代码。你可以查看这些文件以获取更具体的例子和实现细节。

    Python 调用Java实例详解

    Python 调用Java实例详解 前言: Python 对服务器端编程不如Java 所以这方面可能要调用Java代码 前提: Linux 环境  1 安装 jpype1 安装后测试代码:  from jpype import * startJVM(getDefaultJVMPath(), "-ea...

    Python库 | JPype1-1.2.0-cp37-cp37m-manylinux1_x86_64.whl

    这意味着Python程序员可以通过JPype1调用Java类库,使用Java的功能,如处理大规模数据、利用现有的Java企业级框架等。这在需要跨平台兼容性或者希望利用Java生态系统的丰富资源时非常有用。 在实际应用中,例如,...

    python调用java

    本篇文章将详细探讨如何使用Python调用Java代码,帮助你理解这一技术的关键点。 标题"python调用java"表明我们要讨论的是如何在Python程序中执行Java代码或调用Java接口。Python因其简洁的语法和丰富的库而广受欢迎...

    python调用java.rar

    本主题聚焦于“Python调用Java”的技术,这允许我们利用Python的易用性和Java的高性能特性。我们将深入探讨如何实现这一目标,以及相关的知识点。 首先,Python和Java之间的互操作性主要依赖于`Jython`、`Jpype`和`...

    JPype1 -0.6.1

    5. **交互操作**:现在,你可以调用Java对象的方法,传递Python对象作为参数,也可以将Java对象的结果返回到Python中。JPype1会自动处理类型转换,使得Python和Java之间的数据交换变得简单。 6. **关闭JVM**:当...

    jpypePython.zip

    通过JPype,Python程序员可以直接在Python环境中调用Java方法,创建和操作Java对象,使得两个平台的代码可以协同工作。 2. **Python与Java的互操作性**:JPype使得Python开发者可以利用Java的强类型、面向对象的...

    用java调用python

    为了结合两者的优势,我们经常需要在 Java 程序中调用 Python 脚本或库,以便利用 Python 的强大功能来解决特定问题。 在 Java 中调用 Python 主要有以下几种方法: 1. **使用 Jython**: Jython 是一个 Python ...

    Python库 | JPype1-1.1.1-cp35-cp35m-manylinux1_x86_64.whl

    JPype的核心功能在于它的互操作性,它实现了Python与Java之间的桥接,使得Python可以调用Java的方法,创建Java对象,甚至可以处理Java集合和异常。这对于那些需要利用Java库,如大数据处理框架Hadoop、机器学习库...

    Jpype1 64位 python3.6

    有时候,我们可能需要在Python项目中调用Java的库或服务,这时,Jpype1就起到了关键作用。Jpype1是一个开源的Python绑定库,允许Python代码无缝地与Java环境交互,实现了Python与Java之间的互操作性。 Jpype1 64位...

    python如何调用java类

    由于 python 本身为脚本语言,且经常存在调用第三方库的情况,有的时候用 java 调用 python 不如用 python 调用 java 方便。下面就整理一下在 python 调用 java 过程中需要哪些操作。(默认是 linux 的 Ubuntu 上调...

    jpype-0.6.3

    2. **Python调用Java类:** JPype提供了一个`startJVM()`函数来启动JVM,并且可以设置Java的类路径。一旦JVM启动,就可以使用`JClass`来实例化Java类,如: ```python import jpype from jpype.types import ...

    JPype最新版 使用于py2.7

    JPype最新版,使用于py2.7,主要用于phthon调用JAVA

    python/jpype资料大全

    而JPype则是一个让Python能够与Java平台进行无缝交互的开源库,它允许Python程序调用Java类库,从而极大地扩展了Python的应用范围。 Python的核心特性包括其动态类型系统、自动内存管理、丰富的内置函数和模块,...

    jpype for python 2.4

    Python调用Java类的能力是通过JPype实现的。JPype创建了一个桥接,允许Python解释器直接与Java虚拟机(JVM)通信。这使得Python开发者可以利用Java的高性能计算能力、企业级库,以及Android开发等领域的资源。使用...

    python调用java的jar包方法

    而Python调用Java的JAR包方法主要是通过JPype库来实现的。JPype是一个Python库,可以让Python语言调用Java语言中的类和方法。下面是Python调用Java的JAR包方法的示例代码: ``` from jpype import * jvmPath = ...

    JPype 2.7 安装包(windows 平台下)- 下调积分

    JPype是Python中一个非常重要的库,它允许Python代码无缝地调用Java类库和方法,使得Python开发者能够利用Java的强大功能,特别是在处理大规模企业级应用、大数据分析或使用丰富的Java库时。标题中的"JPype 2.7 ...

    java调用python中的自定义函数函数

    Jython不仅实现了Python的标准库,还能调用Java类库,使得Java与Python的交互变得可能。 接下来,我们介绍如何在Java中使用Jython调用Python的自定义函数。假设我们有一个Python文件,名为`addition.py`,其中包含...

    JPype1-0.6.3-py3.5-win-amd64

    **JPype1** 是一个开源项目,用于在Python中无缝集成Java环境,使得Python程序员能够直接调用Java类库和方法。这个版本是 **0.6.3**,专为Python **3.5** 设计,并且适用于 **Windows 64位**(amd64)系统。提供的...

Global site tag (gtag.js) - Google Analytics