您的位置:首页 > 编程语言 > Python开发

通过用第三方包jpype在Python中调用Java代码

2017-02-20 12:39 633 查看

一.环境搭建

1.安装32位版本的Python2.7

2.安装JPype-0.5.4.2.win32-py2.7.exe

3.安装32位的1.6版本的jdk

二.可能会遇到的问题

1.安装jpype时出现错误,翻译过来是没有那个仓库,也就是说找不到Python的安装路径(报错的现象当时我没有截图)

执行以下代码就可以解决

import sys
from _winreg import *
tweak as necessary
version = sys.version[:3]
installpath = sys.prefix

regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
installpath, installpath, installpath
)

def RegisterPy():
try:
reg = OpenKey(HKEY_CURRENT_USER, regpath)
except EnvironmentError as e:
try:
reg = CreateKey(HKEY_CURRENT_USER, regpath)
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
except:
print "*** Unable to register!"
return
print "--- Python", version, "is now registered!"
return
if (QueryValue(reg, installkey) == installpath and
QueryValue(reg, pythonkey) == pythonpath):
CloseKey(reg)
print "=== Python", version, "is already registered!"
return
CloseKey(reg)
print "*** Unable to register!"
print "*** You probably have another Python installation!"

if __name__ == "__main__":
RegisterPy()


2.执行
jpath=getDefaultJVMPath()
后执行
print jpath
得到的结果为
none

出现这个问题的原因是jdk的版本问题,笔者用jdk1.6-32位的Java解决了这个问题,笔者一开始用的是jdk1.8-64位的时候出现这个问题,具体jdk1.8-32、jdk1.7-32位等版本是否可行,笔者没有亲自试过。但使用jdk1.6-32位的Java肯定能解决这个问题。在这里,还要说明一下,如果你的
jpath=getDefaultJVMPath()
后执行
print jpath
得到的结果为
none
,你强制去jdk下取jvm.dll的绝对路径来给jpath赋值,你运行startJVM(jpaht, “-ea”)时python.exe程序会崩溃。

3.运行一个小程序



如果这个小程序你运行的结果和我的一样,说明你就成功了,

四.jpype的语法介绍

详细见:http://jpype.sourceforge.net/doc/user-guide/userguide.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python java
相关文章推荐