任务是使用python对java做api测试。
我有一段通过python调用java api的代码,该代码诡异的地方在于,当我import第三方包时,就会导致异常,如果没有引入第三方包,则可以正常运行。
代码类似如此:
import jpype
import xlwt # 这一步注释与否会决定是否报错
if __name__ == "__main__":
jars = "D:\MyJar.jar"
jvm_path = jpype.getDefaultJVMPath()
jvm_cp = "-Djava.class.path={}".format(jars))
if not jpype.isJVMStarted():
startJVM(jvm_path, jvm_cp)
JCls = jpype.JPackage('package_name').class_name
Jcls = JCls()
jcls.open_service() # 报错的地方,因为这个接口会加载C的dll库。
其中关键的地方在于,java api会去load一个.dll文件。如果没有import xlwt这一步,那么dll是可以正常加载成功,且接口可以正常调用。但是如果有import xlwt这一步,那么java load dll的功能就会抛出异常,报找不到应用程序。
import xlwt只是一个举例,根据测试,导入其他第三方包,并且包的__init__.py中有import其他模块的指令,都会导致这种情况出现。
报错信息如图:
实在搞不懂python import第三方包怎么会导致这个问题出现。
环境:win7 64bit;python3.7 32bit, jdk 32bit.
应该怎样解决,请教各位,谢谢!
补充说明:
java程序里调用这个jar没问题,甚至在python里,当没有导入第三方包时,调用这个jar也没问题;
jdk版本是32bit的,环境变量也正确配置 第三方包就是python里site-packages通过pip install安装的包
.dll文件的路径,有配置在环境变量里,java通过环境变量里的配置来获取路径。jdk的版本是32bit。dll的没确定,不过在不导入第三方包的情况下,是可以调用起来的
这个问题涉及到多语言调用,java和c那边我也不了解细节,而且由于公司内网环境, 一开始没法提供更详细的信息,增加了思考问题的难度,如果最后有直接解决问题的答案,就采纳该答案,如果没有,则采纳对解决问题有参考意义的答案。谢谢各位。