当前位置:
首页 > temp > 简明python教程 >
-
如何在Python中调用打包好的Jar文件?
首先是在anaconda中进入我这个项目对应的一个环境,然后在这个环境中下载并且安装jpype。那么就可以直接import了。但是这里出现了一系列的问题
第一个问题,getDefaultJVM()报错,报的错是找不到默认的JVM,提示我配置好JAVA_HOME
在配置好JAVA_HOME之后,再次试了一下,就还是提示了一下找不到JVM,让我继续配置JAVA_HOME,这里我重启了一下pycharm,然后提示了我下一个问题
第二个问题,python是64位的而我jvm是32位的
我刚开始还不信,于是在网上查了一下,cmd中java -version如果版本中有出现64-bit的字样,那么就说明是64位的,反之则没有,我试了一下,我的果然没有64位字样,说明我的是32位的。接下来就是重装java,记得要首先在环境变量中将我们之前配置的环境变量删除,这个时候可以用个文本文件保存一下,等会儿重装的时候还要配置。删除了环境变量之后再用软件管家卸载java,这里有两个东西,都卸载掉。然后到官网下载,官网上找到windows,有x86和x64的,x86是32位的,下载x64位的JDK,记住一定是安装JDK而不是JRE。安装之后配置一下环境变量,配置之后如果在cmd中输入java -version 和javac都出现提示信息说明配置成功。这一个问题算是解决了,下一个问题。
我测试了一下我打包的项目文件,我用JClass()去找其中的一个类,提示我没有这个类
这个时候我去找了一下很多博客,都不是我这个问题,还有的人说我这个版本不行,说什么jpype不支持jdk1.6以上的,我差点就要放弃了,因为我不会为了这个版本而丢弃1.8,这太蠢了吧。但是后来我尝试了一下用别人的步骤先搭了一个简单的包,而且用cmd javac编译了一个类,并且用jar cvf myjar.jar com打包了这个项目,在python中找到了相应的类,是个JClass类,而且并成功实例化了该类。如果cmd不编译该类,则不能实例化。后面尝试了用IDEA打包,也是可以实例化并执行的。所以问题又来了
如何用IDEA打包我自己的项目代码?
之前提到用JClass去找类的时候提示没有找到这个类,我觉得很奇怪,于是先解压我的jar包,发现它不是第一层目录,里面还有一些杂七杂八的东西,里面还有一个jar包,再次解开这个jar包,才发现是我想要的东西。于是把他引入到我的python项目中,这下成功找到了那个类,而且可以实例化并成功调用相关的方法。这里有个小坑就是,在我们创建artifacts的时候,如果从from mudule with dependencies这个方式创建,那么会创建一个之前说到的那个里面还有很多杂七杂八的东西的jar包,就是说,外层多了一层,而我们实际需要的东西,在整个jar包内部的下一层。所以正确的做法是先创建一个empty的artifact,然后从中添加mudule output,这样子就可以了
这个时候我跑了一下我的项目,发现出现了中文乱码
这个中文乱码是在python调用java某个方法,而这个方法是输出中文,的时候,出现的。
我以为是编码的问题,所以就把两边的file encoding都改成了utf-8。但是调用的时候,还是出现了乱码。而如果用cmd执行jar包,是不会出现乱码的,而且python控制台直接输出中文也是正常的,但是在python的控制台用java的输出,就会出错。而如果java的方法返回一个字符串,在python这边输出,确是很正常的,这就说明。其实jar包并没有乱码的问题,有问题的是,jvm的输出在python这边的虚拟机上出现了乱码,这里猜测是更底层的实现细节,这里没有具体去深究。目前的解决方法就是,不在Java中进行输出,统一在python中输出。但是还有个问题
为什么java代码是先输出了之后才是python输出?明明部分python代码在前面啊?还未搞清楚
第一个问题,getDefaultJVM()报错,报的错是找不到默认的JVM,提示我配置好JAVA_HOME
在配置好JAVA_HOME之后,再次试了一下,就还是提示了一下找不到JVM,让我继续配置JAVA_HOME,这里我重启了一下pycharm,然后提示了我下一个问题
第二个问题,python是64位的而我jvm是32位的
我刚开始还不信,于是在网上查了一下,cmd中java -version如果版本中有出现64-bit的字样,那么就说明是64位的,反之则没有,我试了一下,我的果然没有64位字样,说明我的是32位的。接下来就是重装java,记得要首先在环境变量中将我们之前配置的环境变量删除,这个时候可以用个文本文件保存一下,等会儿重装的时候还要配置。删除了环境变量之后再用软件管家卸载java,这里有两个东西,都卸载掉。然后到官网下载,官网上找到windows,有x86和x64的,x86是32位的,下载x64位的JDK,记住一定是安装JDK而不是JRE。安装之后配置一下环境变量,配置之后如果在cmd中输入java -version 和javac都出现提示信息说明配置成功。这一个问题算是解决了,下一个问题。
我测试了一下我打包的项目文件,我用JClass()去找其中的一个类,提示我没有这个类
这个时候我去找了一下很多博客,都不是我这个问题,还有的人说我这个版本不行,说什么jpype不支持jdk1.6以上的,我差点就要放弃了,因为我不会为了这个版本而丢弃1.8,这太蠢了吧。但是后来我尝试了一下用别人的步骤先搭了一个简单的包,而且用cmd javac编译了一个类,并且用jar cvf myjar.jar com打包了这个项目,在python中找到了相应的类,是个JClass类,而且并成功实例化了该类。如果cmd不编译该类,则不能实例化。后面尝试了用IDEA打包,也是可以实例化并执行的。所以问题又来了
如何用IDEA打包我自己的项目代码?
之前提到用JClass去找类的时候提示没有找到这个类,我觉得很奇怪,于是先解压我的jar包,发现它不是第一层目录,里面还有一些杂七杂八的东西,里面还有一个jar包,再次解开这个jar包,才发现是我想要的东西。于是把他引入到我的python项目中,这下成功找到了那个类,而且可以实例化并成功调用相关的方法。这里有个小坑就是,在我们创建artifacts的时候,如果从from mudule with dependencies这个方式创建,那么会创建一个之前说到的那个里面还有很多杂七杂八的东西的jar包,就是说,外层多了一层,而我们实际需要的东西,在整个jar包内部的下一层。所以正确的做法是先创建一个empty的artifact,然后从中添加mudule output,这样子就可以了
这个时候我跑了一下我的项目,发现出现了中文乱码
这个中文乱码是在python调用java某个方法,而这个方法是输出中文,的时候,出现的。
我以为是编码的问题,所以就把两边的file encoding都改成了utf-8。但是调用的时候,还是出现了乱码。而如果用cmd执行jar包,是不会出现乱码的,而且python控制台直接输出中文也是正常的,但是在python的控制台用java的输出,就会出错。而如果java的方法返回一个字符串,在python这边输出,确是很正常的,这就说明。其实jar包并没有乱码的问题,有问题的是,jvm的输出在python这边的虚拟机上出现了乱码,这里猜测是更底层的实现细节,这里没有具体去深究。目前的解决方法就是,不在Java中进行输出,统一在python中输出。但是还有个问题
为什么java代码是先输出了之后才是python输出?明明部分python代码在前面啊?还未搞清楚
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数