zoukankan      html  css  js  c++  java
  • python 调用 java代码

    一、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 copy
    from jpype import *
    import os.path
    startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll", "-ea")
    java.lang.System.out.println("hello World")
    shutdownJVM()

    2.调用JAVA第三方扩展包

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

    [java] view plain copy
    package jpype;

    public class JpypeDemo {
    public String sayHello(String user){
    return "hello" + user;
    }
    public int calc(int a, int b){
    return a + b;
    }
    }

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

    [python] view plain copy
    from jpype import *  
    import os.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))

    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    算法训练 表达式计算
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    New ways to verify that Multipath TCP works through your network
    TCP的拥塞控制 (Tahoe Reno NewReno SACK)
    Multipath TCP Port for Android 4.1.2
    How to enable ping response in windows 7?
    NS3
    Multipath TCP Port for Android
  • 原文地址:https://www.cnblogs.com/Frank99/p/9817293.html
Copyright © 2011-2022 走看看