Python调用Java_行走在风中的博客-程序员宅基地

安装

python -m pip install jpype1

pythonIDE

python3.6
java1.8
eclipse4.6.3 PyDev(python在eclipse插件) (不得不说,eclipse很强大)

HelloWord

  • 设置参数启动Java虚拟机
  • 运行Java代码
  • 关闭虚拟机
#coding=utf=8
import jpype
jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径
jpype.startJVM(jvm=jvmPath) # 启动虚拟机
# 执行JAVA代码
jpype.java.lang.System.out.println("hello world")
jpype.shutdownJVM() # 关闭jvm

使用Java中的对象

第一种:jpype支持直接使用Java编译后的class文件。

package com;
public class JavaClass
{
    String value;
    public JavaClass(String value)
    { 
        this.value = value+" Java"; 
    } 
    public String getValue()
    { 
        return this.value;
    }
    public void say()
    {
        System.out.println("hello java");
    }
    public static void main(String[] args) {
        System.out.println("hello world");    
    }
 }

随后生成class文件

python代码

#coding=utf=8
import jpype
# 获得系统的jvm路径
jvmPath = jpype.getDefaultJVMPath() 
# 启动虚拟机
if not jpype.isJVMStarted():
    jpype.startJVM(jvm=jvmPath)
# 使用JAVA字节码中定义的类
javaClass = jpype.JClass('com.JavaClass')
# 实例化对象
javaInstance = javaClass('test')
#调用JAVA对象的方法
print (javaInstance.getValue())
javaInstance.say()
# 关闭jvm
jpype.shutdownJVM()

第二种:jpype也支持直接使用Java程序打包后的jar文件。
教大家一种打包的方法,我以前是写web前端的,用习惯了eclipse,所以我的python工具也是eclipse,感兴趣的可以跳到我配置eclipse+python环境的博客。

我们在eclipse编写完java程序后呢,在自己程序的包上面 右键 菜单中有一个 Export 的功能,点击完之后,就可以选择输出格式和路径了,我这里选择的是 java – JAR file

好了,言归正传。
原Java代码

package test;  
public class Test1  
{  
    public String getKey(String key){  
        return key;  
    }  
    public void printData(String key){  
        System.out.println(key);  
    }  

    public static void main(String[] args)  
    {  
        System.out.println(456);  
    }  
}

Python代码

import jpype
#获取系统jvm路径
jvmPath = jpype.getDefaultJVMPath()
# 用来添加JAVA虚拟机命令行参数
ext_classpath = './Test1.jar'
jvmArg = '-Djava.class.path=' + ext_classpath
if not jpype.isJVMStarted():
    jpype.startJVM(jvmPath, jvmArg)
    TA = jpype.JPackage('test').Test1 #这种用法可以简化后面的书写
    jd = TA()
    jd.printData('1234')
    s = jd.getkey('a')
    print (s)
    system = jpype.java.lang.System #直接获取java内置输出实例
    system.out.println("call system method")
jpype.shutdownJVM()
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36874480/article/details/80579046

智能推荐

C++ vector的用法_qinyuehong的博客-程序员宅基地_c++vector用法

vector 是C++ STL的一个重要成员,使用它时需要包含头文件:#include<vector>;一、vector 的初始化:可以有五种方式,举例说明如下: (1) vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。 (2)vector&...

Ubuntu18.04入门笔记_Mars图图的博客-程序员宅基地

title:Python and Linuxdate: 2021-04-01categories: Python and Linux文章目录title:Python and Linuxdate: 2021-04-01categories: Python and [email protected][toc]学习前记操作系统Linux发展史Linux 内核虚拟机Ubuntu18.04VMare 安装Ubuntu18.04Ubuntu18.04 安装VMware-tools安装好后开始Ubuntu的一些配置Ubuntu18.

【暖*墟】 #洛谷提高网课# 8.1初级数据结构(1)_flora715_hss的博客-程序员宅基地

链表 当平时使用数组时,有时会遇到一些问题:在删除一个数据时,为了保证数据的连续性, 需要将删除点右边的数据、全部往左移一格。 在插入一个数据时,为了保证数据的连续性, 需要将插入点右边的数据、全部往右移一格。  每次移动的时间复杂度为O(N),如果元素较多时会时间超限。 链表一个位置包括了自己位置上的值和下一个值所在的位置。这样链表就可以实现O(1)的插入/删除,同时保...

学习WCF之路5:ClientBase的使用_JokerChen0913的博客-程序员宅基地

在上篇中,我们利用通道工厂ChannelFactory类来实现同样的功能。      ClientBase不同的是,这个类是一个基类,即抽象类,是不能实例化成对象直接使用的,我们需要自己写一个类来继承这个类,我们新写的类实例化出来就是客户端代理了,这个对象可以调用基类的一些受保护的方法来实现通信。实现步骤:(1)新建一个控制台应用程序作为客户端,并且添加System.Ser

机器学习线性回归中的最小二乘原理_advance I的博客-程序员宅基地

1. 最小二乘原理1.1 传统数学代码实现最小二乘%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltimport sklearnfrom sklearn import datasetsimport pandas as pd# 导入糖尿病人数据,赋给变量d。d = datasets.load_diabetes()# 取数据集的所有行和第三列数据作为训练数据。X = d.data[:,2]# 将tar

dubbo简单应用_樊大大的博客-程序员宅基地

依赖jar包 <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.ver...

随便推点

java基础18 String字符串和Object类(以及“equals” 和 “==”的解析)_weixin_30824479的博客-程序员宅基地

一、String字符串问:笔试题:new String("abc")创建了几个对象?答:两个对象,一个对象是 位于堆内存,一个对象位于字符串常量池 1 class Demo17 { 2 public static void main(String[] args) { 3 String str1 = "hello"; 4 String ...

Fortran:第三方函数库的使用_chder_白南的博客-程序员宅基地_fortran函数库

fortran函数库的使用,纷繁复杂,一两句话是讲不清楚的。同样,本人在这里给出资源供大家学习:视频:http://v.fcode.cn/video-use_library.htmlQQ群:100125753; 2338021...

《技术之瞳》— — In Science_韭菜鸡蛋虾饺的博客-程序员宅基地

1.事实上,Internet网络并不是世界时承载数据流量最大的网络,数据中心内部网络所承载的数据流量至少是Internet的2倍以上。2.一般,网络速率单位为bit/s,存储量单位B。3.数据备份场景,数据量特别大同时数据使用频率低,如果为此使用高速网络,那么网络资源的成本非常高,而且网络设备时间利用率不高。Google云存储客户可以游记硬盘给Google,然后Google在数据中心直接把...

节点精灵免Root安卓辅助脚本学习一:搭建环境_代码浪人的博客-程序员宅基地_节点精灵

文章目录一、安装模拟器(雷电模拟器)二、安装节点精灵app2.1 设置网络方法二:把手机安装节点精灵APP一、安装模拟器(雷电模拟器)雷电模拟器官网相关资料我都放在网盘了https://www.ldmnq.com/?n=6000&bd_vid=9779735697563434983二、安装节点精灵app节点精灵安装官网安装完了,拖进模拟器自动安装2.1 设置网络方法二:把手机安装节点精灵APP连上同一个wifi浏览器打开...

linux加载mod初学_s467626472的博客-程序员宅基地

主要是给自己看的1.准备源文件起名叫mymod.c#include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){printk(KERN_ALERT "Hello, world\n");return 0;}static void hello_exit(void)

linux 拍照软件有哪些,六款基于Linux的开源照片管理软件推荐_麦丽素达人朱厚熜的博客-程序员宅基地

六款基于Linux的开源照片管理软件推荐,哪吒游戏网给大家带来详细的六款基于Linux的开源照片管理软件推荐介绍,大家可以阅读一下,希望这篇六款基于Linux的开源照片管理软件推荐可以给你带来参考价值。数字摄影技术让摄影师不用再担心照片处理问题,他们可以放心拍摄数千幅照片,唯一需要担心的是充电。多数数字照相机是以RAW格式储存原始照片,这些照片未经过处理,用户一般需要利用计算机软件去进行处理,如转...