首先是在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代码在前面啊?还未搞清楚java