通过用第三方包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 通过Jpype调用Java类
- python调用Java代码并执行--------jpype使用篇
- Python+Jpype 调用 Java 碰壁全记录
- PhoneGap中通过Plugin实现JS调用Java代码
- Cocos2d-x游戏开发之Cocos2dx通过JNI调用Android的Java代码(webView实例)
- Cocos2d-x中通过JNI进行C++调用Java代码
- Cocos2d-x学习之通过Jni调用Android的Java层代码
- JAVA与.NET的相互调用——通过Web服务实现相互调用(附原代码)
- JPype -- python调用Java
- JPype:实现在python中调用JAVA
- 【iOS-cocos2d-X 游戏开发之十三】详细讲解在Xcode中利用预编译并通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)!
- cocos2dx通过Jni调用Android的Java层代码(上)
- 【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(上)
- 通过基站信息(LAC,CID)调用google的json接口获取地理位置信息的Java代码
- 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分
- JNA (Java Native Access) 不通过JNI直接调用本地代码
- JAVA与.NET的相互调用——通过Web服务实现相互调用(附原代码)
- python调用Java-JPype使用介绍(一)(转)
- Cocos2d-x中通过JNI进行C++调用Java代码
- 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分