当前位置:首页 » 编程语言 » python调用java

python调用java

发布时间: 2022-08-13 20:45:07

A. python 调用java 是每一次都启动jvm吗

是的

一、JPype简述

1.JPype是什么?

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

2.JPype与Jython(JPython后继者)的区别?

1)运行环境不同:jython运行在jvm上,而JPype的实际运行环境仍然是python runtime,只是在运行期间启动了一个嵌入的jvm;

2)使用者不同:jython是给java程序玩的,JPype是给python程序员玩的。

二、JPype安装

1.先安装Python2.7和JAVA1.6

2.安装JPype-0.5.4.2.win32-py2.7.exe(http://sourceforge.net/projects/jpype/files/JPype/0.5.4/)

3.Ubuntu12.04安装命令:sudo apt-get install python-jpype

三、JPype使用说明

1.启动JVM

JPype 提供的 startJVM() 函数的作用是启动 JAVA 虚拟机,所以在后续的任何 JAVA 代码被调用前,必须先调用此方法启动 JAVA 虚拟机。

  • jpype.startJVM() 的定义

    startJVM(jvm, *args)

  • jpype.startJVM() 的参数

    参数 1: jvm, 描述你系统中 jvm.dll 文件所在的路径,如“ C:Program FilesIBMJava50jreinj9vmjvm.dll ”。可以通过调用 jpype.getDefaultJVMPath() 得到默认的 JVM 路径。

    参数 2: args, 为可选参数,会被 JPype 直接传递给 JVM 作为 Java 虚拟机的启动参数。此处适合所有合法的 JVM 启动参数,例如:

    -agentlib:libname[=options]
    -classpath classpath
    -verbose
    -Xint

  • 2.关闭JVM

    当使用完 JVM 后,可以通过 jpype.shutdownJVM() 来关闭 JVM,该函数没有输入参数。当 python 程序退出时,JVM 会自动关闭。

    3.引用第三方Java扩展包

    很多时候,在 python 项目中需要调用第三方的 Java 扩展包,这也是 JPype 的一个重要用途。

    通过在 JVM 启动参数增加:-Djava.class.path=ext_classpath,实现在 python 代码中调用已有的 Java 扩展包。

    4.访问JAVA的系统属性

    有时,某些 Java 应用需要设置或者获取 JVM 中的系统属性。

  • 在 JVM 启动时设置系统变量示例:

  • 在 JVM 的启动参数中加入如下参数:
    -Dproperty=value

  • 四、举例

    1.直接调用JAVA API

    [java]view plain

  • fromjpypeimport*

  • importos.path

  • startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll","-ea")

  • java.lang.System.out.println("helloWorld")

  • shutdownJVM()



  • 2.调用JAVA第三方扩展包

    1)JAVA自定义第三方jar包:将JpypeDemo类打包为jpypedemo.jar文件并存储到F:/sample_Py目录下

    [java]view plain

  • packagejpype;

  • publicclassJpypeDemo{

  • publicStringsayHello(Stringuser){

  • return"hello"+user;

  • }

  • publicintcalc(inta,intb){

  • returna+b;

  • }

  • }



  • 2)Python调用第三方JAVA jar包程序

    [python]view plain

  • fromjpypeimport*

  • importos.path

  • jarpath=os.path.join(os.path.abspath('.'),'F:/sample_Py/')

  • startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll","-ea","-Djava.class.path=%s"%(jarpath+'jpypedemo.jar'))

  • #ubuntu 中startJVM("/home/geek/Android/jdk1.6.0_43/jre/lib/i386/server/libjvm.so","-ea","-Djava.class.path=%s"%(jarpath+'XXX.jar'))

  • JDClass=JClass("jpype.JpypeDemo")

  • jd=JDClass()

  • #jd=JPackage("jpype").JpypeDemo()#两种创建jd的方法

  • jprint=java.lang.System.out.println

  • jprint(jd.sayHello("waw"))

  • jprint(jd.calc(2,4))

  • shutdownJVM()



  • 3.访问JAVA的系统属性

    假设你要设置的属性名为 yourProperty,属性值为 yourValue 。

    1)JVM启动时设置系统变量示例

    import jpype
    jvmPath = jpype.getDefaultJVMPath()
    jvmArg = “ -DyourProperty=yourValue ”
    if not jpype.isJVMStarted():
    jpype.startJVM(jvmPath,jvmArg)

    2)在程序中设置系统变量示例

    import jpype
    prop = “ yourProperty ”
    value = “ yourValue ”
    system = jpype.JClass('java.lang.System')
    system.setProperty(str(prop),str(value))

    3)在程序中获取系统变量示例

    import jpype
    prop = “ yourProperty ”
    system = jpype.JClass('java.lang.System')
    value = system.getProperty(str(prop))

B. 有没有从Python调用Java的好方法

[java]view plain

  • String[]arg=newString[]{"python",types,parameter};//第一个参数是python解释器位置,第二个参数是执行的python脚本位置,接下来的都是参数

  • Processprocess=Runtime.getRuntime().exec(arg);

  • =newInputStreamReader(process.getInputStream());

  • BufferedReaderbufferedReader=newBufferedReader(inputStreamReader);

  • Stringline="";

  • StringBufferstringBuffer=newStringBuffer();

  • while((line=bufferedReader.readLine())!=null){

  • stringBuffer.append(line);

  • stringBuffer.append(" ");

  • }

  • bufferedReader.close();

  • process.waitFor();

C. python怎么调用java程序

  • 把java封装成restful接口,然后python通过远程调用数据。

  • 使用Pyjnius这个python库。

#源代码:github.com/kivy/pyjnius
#文档:pyjnius.readthedocs.org
#也有其他一些的库,如JPype或Py4j,它们在设计和可用性方面都不是很好。而使用Jython也不为另一种选择,因为我们想使用python开发Android项目。
#现在就让我来告诉你,如何简单的使用Pyjnius:
>>>fromjniusimportautoclass
>>>Stack=autoclass('java.util.Stack')
>>>stack=Stack()
>>>stack.push('hello')
>>>stack.push('world')
>>>stack.pop()
'world'
>>>stack.pop()
'hello'

D. 如何使用Python访问Java类

可以使用线程类来调用执行 像执行外部命令一样 访问具体属性和方法的话不可以 实在不行你就用Python来实现你那个java类的功能不就得了
如有疑问追问,如满意记得采纳,
如果有其他问题也可点我名字向我求助

E. python 调用java对象

你使用jython这个解释器就可以让python直接调用java, 调用完成后,你用python封装成一个服务。其它的python程序员就可以间接调用java对象了。

jython调用java这个方式也被eclipse+pydev使用,是目前最直接的方法。

F. python怎样调用Java中类

这个有几种方式,你看看哪种更适合你。

  1. 把java封装成restful接口,然后python通过远程调用数据。

  2. 使用Pyjnius这个python库。

#源代码:github.com/kivy/pyjnius
#文档:pyjnius.readthedocs.org
#也有其他一些的库,如JPype或Py4j,它们在设计和可用性方面都不是很好。而使用Jython也不为另一种选择,因为我们想使用python开发Android项目。
#现在就让我来告诉你,如何简单的使用Pyjnius:
>>>fromjniusimportautoclass
>>>Stack=autoclass('java.util.Stack')
>>>stack=Stack()
>>>stack.push('hello')
>>>stack.push('world')
>>>stack.pop()
'world'
>>>stack.pop()
'hello'

如果解决了您的问题请采纳!
如果未解决请继续追问!

G. python 怎么 调用 自定义的 java 类

这个有几种方式,你看看哪种更适合你。
把java封装成restful接口,然后python通过远程调用数据。
使用Pyjnius这个python库。

#源代码:github.com/kivy/pyjnius
#文档:pyjnius.readthedocs.org
#也有其他一些的库,如 JPype 或 Py4j ,它们在设计和可用性方面都不是很好。而使用 Jython也不为另一种选择,因为我们想使用 python开发Android项目。
#现在就让我来告诉你,如何简单的使用Pyjnius:
>>> from jnius import autoclass
>>> Stack = autoclass('java.util.Stack')
>>> stack = Stack()
>>> stack.push('hello')
>>> stack.push('world')
>>> stack.pop()
'world'
>>> stack.pop()
'hello'
如果解决了您的问题请采纳!

热点内容
一台服务器多个同段地址怎么通讯 发布:2025-01-20 16:45:58 浏览:734
i7源码 发布:2025-01-20 16:40:48 浏览:983
抽签源码 发布:2025-01-20 16:38:35 浏览:62
密码箱怎么锁住 发布:2025-01-20 16:32:17 浏览:31
编译隔离 发布:2025-01-20 16:28:54 浏览:358
从哪里看自己的qq账号和密码 发布:2025-01-20 16:22:33 浏览:400
sql语句动态 发布:2025-01-20 16:18:22 浏览:298
sql表或的语句 发布:2025-01-20 16:00:49 浏览:163
西瓜视频怎么缓存不了电影了 发布:2025-01-20 16:00:45 浏览:890
javatimer 发布:2025-01-20 15:55:56 浏览:64