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

如何在Python中调用打包好的Jar文件?的更多相关文章

  1. 如何在python中调用C语言代码

    1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写的函数-ctypes,SWIG,Python/ ...

  2. 如何在Python中调用Matlab

    检查您的系统是否具有受支持的 Python 版本和 MATLAB R2014b 或更新版本.要检查您的系统上是否已安装 Python,请在操作系统提示符下运行 Python. 1)打开Prompt,输 ...

  3. 使用ctypes在Python中调用C++动态库

    使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ...

  4. 如何在Java中调用Python代码

    有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...

  5. JPype:实现在python中调用JAVA

    一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...

  6. 如何在Python中使用Linux epoll

    如何在Python中使用Linux epoll 内容 介绍 阻塞套接字编程示例 异步套接字和Linux epoll的好处 epoll的异步套接字编程示例 性能考量 源代码 介绍 从2.6版开始,Pyt ...

  7. vs2013如何在C++中调用Lua(二)

    Lua学习笔记 vs2013如何在C++中调用Lua (此为转载教程) 本人试过完全可行 一.准备工作 1.下载Lua源码,地址:http://www.lua.org/download.html(我用 ...

  8. 如何在Delphi中调用VC6.0开发的COM

    上次写了如何在VC6.0下对Delphi写的COM进行调用,原本想马上写如何在Delphi中调用VC6.0开发的COM时,由于在写事例程序中碰到了个很怪的问题,在我机子上用VC写的接口程序编译能通过. ...

  9. Python脚本传參和Python中调用mysqldump

    Python脚本传參和Python中调用mysqldump<pre name="code" class="python">#coding=utf-8 ...

随机推荐

  1. CodeForces985G Team Players

    G. Team Players time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. require.context批量引入文件

    require.context 是什么 require.context 是由webpack内部实现,require.context在构建时,webpack 在代码中进行解析. 当需要引入文件夹内多个文 ...

  3. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查

    使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...

  4. Everspin非易失性MRAM切换技术

    切换MRAM技术 切换MRAM使用1个晶体管,1个MTJ单元来提供简单的高密度存储器.Everspin使用获得专利的Toggle电池设计,可提供高可靠性.数据在温度下20年始终是非易失性的. 在读取期 ...

  5. Orleans[NET Core 3.1] 学习笔记(一).NET环境下的分布式应用程序

    前言 Orleans是一个跨平台的框架,用于搭建可扩展的分布式应用程序 第一次接触Orleans还是两年前做游戏服务器的时候,用SignalR+Orleans的组合,写起代码来不要太爽. 即将进入20 ...

  6. 动态代理模式——JDK动态代理

    今天,我就来讲一下动态代理的设计模式. 动态代理的意义在于生成一个代理对象,来代理真实对象,从而控制真实对象的访问.操作动态代理需要两个步骤:一.代理对象和真实对象建立代理关系.二.实现代理对象的代理 ...

  7. CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现

    CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现 参考文章1 参考文章2 By:Mirror王宇阳 漏洞原理 攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞. ...

  8. 升级sharepoint2013遇到的坑

    现在要将sharepoint2010,ProjectServer2010升级到2016的版本,需要先升级到2013的版本. 按照官方文档,瞎搞将sharepoint2010升级到2013的版本,中间出 ...

  9. 安卓JNI精细化讲解,让你彻底了解JNI(二):用法解析

    目录 用法解析 ├── 1.JNI函数 │ ├── 1.1.extern "C" │ ├── 1.2.JNIEXPORT.JNICALL │ ├── 1.3.函数名 │ ├── 1 ...

  10. ProcessExplorer 工具下载

    链接:https://pan.baidu.com/s/1RPYkFqIMvBX2OKvTm0bgkw 提取码:4v5v