转自:
http://www.ibm.com/developerworks/cn/opensource/os-cn-jpype/index.html
Python 作为一种灵活的软件开发语言在当今被广泛使用。在软件开发过程中,有时需要在 Python 项目中利用既有的 Java 代码,已达到节省时间和开发成本的目的。因此,找到一个 Python 代码调用 Java 代码的桥梁是非常有意义的。 JPype 就是这样的一个工具,利用它可以使 Python 程序方便的调用 Java 代码,从而扩充 Python 语言的能力,弥补 Python 语言的不足。本文介绍了如何利用 JPype 整合 Python 程序和 Java 程序的一些基本方法。
概览
JPype 是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足。
下载
JPype 可以从 sourceforge 网站上下载:http://sourceforge.net/projects/jpype/ 目前 JPype 最新的版本为 0.5.4,支持 python 2.5 和 2.6. 本文以 Windows XP 平台,python 2.5.4 为例阐述。
安装
安装 JPype 前需要先安装 python 。从 http://www.python.org/download 下载 python 并安装,安装路径选择 C:\Python25\,安装完成后在本地 C 盘应有 C:\Python25 目录,该目录下有 python.exe 文件。 Python 安装完后,双击下载的 JPype 安装文件即可安装 JPype 。
许可证
JPype 遵循的许可证是 Apache License V2.0 。
JPype 的使用
一个简单的 hello world 程序
下面是一个简单的 python 程序,通过 JPype 调用 Java 的打印函数,打印出字符串。
清单 1. hello world
import jpype
jvmPath = jpype.getDefaultJVMPath()
jpype.startJVM(jvmPath)
jpype.java.lang.System.out.println( “ hello world! ” )
jpype.shutdownJVM()
启动 JVM
JPype 提供的 startJVM() 函数的作用是启动 JAVA 虚拟机,所以在后续的任何 JAVA 代码被调用前,必须先调用此方法启动 JAVA 虚拟机。
jpype.startJVM() 的定义
startJVM(jvm, *args)
jpype.startJVM() 的参数
参数 1: jvm, 描述你系统中 jvm.dll 文件所在的路径,如“ C:\Program Files\IBM\Java50\jre\bin\j9vm\jvm.dll ”。可以通过调用 jpype.getDefaultJVMPath() 得到默认的 JVM 路径。
参数 2: args, 为可选参数,会被 JPype 直接传递给 JVM 作为 Java 虚拟机的启动参数。此处适合所有合法的 JVM 启动参数,例如:
-agentlib:libname[=options]
-classpath classpath
-verbose
-Xint
清单 2. jpype.startJVM() 的用法示例
import jpype
jvmPath = jpype.getDefaultJVMPath()
jvmArg = “ -Xint ”
jpype.startJVM(jvmPath,jvmArg)
判断 JVM 是否启动
JPype 提供的 jpype.isJVMStarted() 函数的作用是判断 JVM 是否已启动。
jpype.isJVMStarted() 的定义
isJVMStarted()
jpype.isJVMStarted() 的返回值
返回值为 True 表示 JVM 已经启动,返回值为 False 表示 JVM 还未启动
清单 3. jpype.isJVMStarted() 的用法示例
import jpype
jvmPath = jpype.getDefaultJVMPath()
jvmArg = “ -Xint ”
if not jpype.isJVMStarted():
jpype.startJVM(jvmPath,jvmArg)
关闭 JVM
当使用完 JVM 后,可以通过 jpype.shutdownJVM() 来关闭 JVM,该函数没有输入参数。当 python 程序退出时,JVM 会自动关闭。
引用第三方的 Java 扩展包
很多时候,在 python 项目中需要调用第三方的 Java 扩展包,这也是 JPype 的一个重要用途。为了使编程者方便地在 python 代码中调用已有的 Java 扩展包,我们可以再在 JVM 启动参数增加:
-Djava.class.path=ext_classpath
以下为调用第三方 Java 扩展包示例,(假设第三方 Java 扩展包的所在路径是 E:\JavaExt)
清单 4. 调用第三方 Java 扩展包示例
import jpype
jvmPath = jpype.getDefaultJVMPath()
ext_classpath = “ E:\\JavaExt ”
jvmArg = “ -Djava.class.path = ” + ext_classpath
if not jpype.isJVMStarted():
jpype.startJVM(jvmPath, jvmArg)
访问 Java 的系统属性
有时,某些 Java 应用需要设置或者获取 JVM 中的系统属性。
在 JVM 启动时设置系统变量示例:
在 JVM 的启动参数中加入如下参数:
-Dproperty=value
假设你要设置的属性名为 yourProperty,属性值为 yourValue 。
清单 5. JVM 启动时设置系统变量示例
import jpype
jvmPath = jpype.getDefaultJVMPath()
jvmArg = “ -DyourProperty=yourValue ”
if not jpype.isJVMStarted():
jpype.startJVM(jvmPath,jvmArg)
清单 6. 在程序中设置系统变量示例
import jpype
prop = “ yourProperty ”
value = “ yourValue ”
system = jpype.JClass('java.lang.System')
system.setProperty(str(prop),str(value))
清单 7. 在程序中获取系统变量示例
import jpype
prop = “ yourProperty ”
system = jpype.JClass('java.lang.System')
value = system.getProperty(str(prop))
Java 类型到 python 类型的转换
表 1. Java 类型到 python 类型的转换
Java 类型 转换成的 python 类型
byte, short and int int
long long
float and double float
boolean int of value 1 or 0
char unicode of length 1
String unicode
arrays JArray
other Java object JavaObject
Class JavaClass
array Class JavaArrayClass
分享到:
相关推荐
这里我们将主要关注Jpype,因为它是Python调用Java的高效且易于使用的工具。 **Jpype简介** Jpype是一个开源项目,它允许Python运行时环境直接启动和控制Java虚拟机(JVM),使得Python能够无缝地导入和使用Java类...
Python是一种强大的脚本语言,广泛应用于数据处理、...`test1`可能是一个测试脚本,而`mython`可能是一个包含Python代码的模块,演示如何使用`jpype`调用Java代码。你可以查看这些文件以获取更具体的例子和实现细节。
Python 调用Java实例详解 前言: Python 对服务器端编程不如Java 所以这方面可能要调用Java代码 前提: Linux 环境 1 安装 jpype1 安装后测试代码: from jpype import * startJVM(getDefaultJVMPath(), "-ea...
这意味着Python程序员可以通过JPype1调用Java类库,使用Java的功能,如处理大规模数据、利用现有的Java企业级框架等。这在需要跨平台兼容性或者希望利用Java生态系统的丰富资源时非常有用。 在实际应用中,例如,...
本篇文章将详细探讨如何使用Python调用Java代码,帮助你理解这一技术的关键点。 标题"python调用java"表明我们要讨论的是如何在Python程序中执行Java代码或调用Java接口。Python因其简洁的语法和丰富的库而广受欢迎...
本主题聚焦于“Python调用Java”的技术,这允许我们利用Python的易用性和Java的高性能特性。我们将深入探讨如何实现这一目标,以及相关的知识点。 首先,Python和Java之间的互操作性主要依赖于`Jython`、`Jpype`和`...
5. **交互操作**:现在,你可以调用Java对象的方法,传递Python对象作为参数,也可以将Java对象的结果返回到Python中。JPype1会自动处理类型转换,使得Python和Java之间的数据交换变得简单。 6. **关闭JVM**:当...
通过JPype,Python程序员可以直接在Python环境中调用Java方法,创建和操作Java对象,使得两个平台的代码可以协同工作。 2. **Python与Java的互操作性**:JPype使得Python开发者可以利用Java的强类型、面向对象的...
它在 Java 和 Python 之间建立了一个安全的通道,使得 Java 可以像调用本地对象一样调用 Python 对象。Py4J 特别适合需要频繁交互或者需要返回复杂数据结构的场景。 5. **使用 JythonBridge**: JythonBridge 提供...
JPype的核心功能在于它的互操作性,它实现了Python与Java之间的桥接,使得Python可以调用Java的方法,创建Java对象,甚至可以处理Java集合和异常。这对于那些需要利用Java库,如大数据处理框架Hadoop、机器学习库...
有时候,我们可能需要在Python项目中调用Java的库或服务,这时,Jpype1就起到了关键作用。Jpype1是一个开源的Python绑定库,允许Python代码无缝地与Java环境交互,实现了Python与Java之间的互操作性。 Jpype1 64位...
2. **Python调用Java类:** JPype提供了一个`startJVM()`函数来启动JVM,并且可以设置Java的类路径。一旦JVM启动,就可以使用`JClass`来实例化Java类,如: ```python import jpype from jpype.types import ...
而JPype则是一个让Python能够与Java平台进行无缝交互的开源库,它允许Python程序调用Java类库,从而极大地扩展了Python的应用范围。 Python的核心特性包括其动态类型系统、自动内存管理、丰富的内置函数和模块,...
由于 python 本身为脚本语言,且经常存在调用第三方库的情况,有的时候用 java 调用 python 不如用 python 调用 java 方便。下面就整理一下在 python 调用 java 过程中需要哪些操作。(默认是 linux 的 Ubuntu 上调...
Python调用Java类的能力是通过JPype实现的。JPype创建了一个桥接,允许Python解释器直接与Java虚拟机(JVM)通信。这使得Python开发者可以利用Java的高性能计算能力、企业级库,以及Android开发等领域的资源。使用...
JPype最新版,使用于py2.7,主要用于phthon调用JAVA
在本文中,我们将为大家分享一篇Python调用Java的JAR包方法,希望对大家有所帮助。 首先,我们需要了解什么是JAR包。JAR包全称为Java Archive,是Java语言中的一种压缩文件格式。它可以将多个Java类文件、资源文件...
4. **Java类的使用**:Python可以创建Java类的实例,调用其方法,甚至可以访问静态方法和成员。 5. **性能考虑**:虽然JPype提供了便利的跨语言交互,但Java和Python的性能差异可能导致性能瓶颈。在选择使用JPype时...
Jython不仅实现了Python的标准库,还能调用Java类库,使得Java与Python的交互变得可能。 接下来,我们介绍如何在Java中使用Jython调用Python的自定义函数。假设我们有一个Python文件,名为`addition.py`,其中包含...
JPype是Python中一个非常重要的库,它允许Python代码无缝地调用Java类库和方法,使得Python开发者能够利用Java的强大功能,特别是在处理大规模企业级应用、大数据分析或使用丰富的Java库时。标题中的"JPype 2.7 ...