파이썬 호출 자바 코드

설명 :  유연한 소프트웨어 개발 언어가 오늘날 널리 사용되는 파이썬으로. 소프트웨어 개발 과정에서, 때로는 우리는 파이썬 프로젝트에서 기존 Java 코드를 사용할 필요가, 시간과 개발 비용을 절감의 목적을 가지고있다. 따라서, 파이썬 코드를 찾는 것은 자바 코드의 다리가 매우 중요하다 호출합니다. JPype는 파이썬 프로그램을 쉽게, 파이썬 언어의 용량을 확장 파이썬 언어를 구성하는 자바 코드를 호출 할 수 있습니다 하나의 도구입니다. 이 문서 JPype 파이썬과 자바 프로그램을 통합하는 방법을 몇 가지 기본적인 방법을 설명합니다.

개요 :

JPype 쉽게에서 (예 : 서버 측 프로그래밍과 같은) 특정 지역에서 파이썬의 부족을 극복하기 위해 자바 코드 도구를 호출 허용하는 파이썬 코드입니다.

JDK 먼저 ​​설치 타사 패키지 jpype 파이썬은 64 비트 또는 32 비트이다.

전제 조건 : JDK 및 파이썬은 이미 설치되어

파이썬 가상 머신 운영에 관련 방법 :

시작 JVM

JPype의 역할은 startJVM를 제공하는 () 함수는 자바 가상 머신을 시작하는 이후의 자바 코드를 호출하기 전에 그래서, 당신은 자바 가상 머신을 시작하려면이 메서드를 호출해야합니다.

jpype.startJVM ()이 정의되고

 

startJVM (JVM을, * 인수) 

# jpype.startJVM () 매개 변수 
# 매개 변수 1 : JVM, 경로는 C "로, 시스템 파일이있는 jvm.dll을 설명 : \ 프로그램 파일 \ IBM \ Java50 \ JRE \ 빈 \ j9vm 디렉토리 \ jvm.dll을 ". 기본 JVM 경로 jpype.getDefaultJVMPath를 호출하는 것으로 취득 할 수 있습니다 (). 
# 매개 변수 2 : 인수는 선택적 매개 변수는 자바 가상 머신 시작 매개 변수로 JPype JVM에 직접 전달됩니다. 다음과 같은 모든 법적 JVM 시작 매개 변수에 대한 
 -agentlib : libname에 [= 옵션] 
  - 클래스 경로는 CLASSPATH 
  - 자세한 
  -Xint

 

jpype.startJVM () 사용 예

 

가져 jpype 
 jvmPath = jpype.getDefaultJVMPath () 
 jvmArg = "- Xint" 
 jpype.startJVM (jvmPath, jvmArg)

 

JVM을 시작할지 여부를 결정

JPype의 역할 함수는 JVM이 시작되는지 여부를 결정하는 것이다 () jpype.isJVMStarted 제공.

  • jpype.isJVMStarted ()이 정의되고

isJVMStarted ()

  • jpype.isJVMStarted는 ()의 값을 돌려줍니다

반환 값이 시작된 JVM에 충실하고, 거짓의 반환 값은 JVM이 시작되지 나타냅니다

# Jpype.isJVMStarted ()의 사용 예를 
가져 오기 JPype 
 jvmPath = jpype.getDefaultJVMPath () 
 jvmarg = "- Xint"
  IF  하지 jpype.isJVMStarted () : 
    jpype.startJVM (jvmPath, jvmarg)

 닫기 JVM

JVM에서의 사용이 종료되면, JVM jpype.shutdownJVM ()에 의해 폐쇄 될 수있는 함수는 입력 매개 변수가 없다. 때 파이썬 프로그램이 종료, JVM이 자동으로 종료됩니다.

 

직접 파이썬 코드에 쓰기 자바 코드를 자바 API를 호출하는 방법을 전화

다음은 간단한 파이썬 프로그램은 문자열을 인쇄, 자바 JPype 인쇄 함수를 호출하여입니다.

가져 jpype 
 jvmPath = jpype.getDefaultJVMPath () 
 jpype.startJVM (jvmPath) 
 jpype.java.lang.System.out.println ( "안녕하세요 세계를!") 
 jpype.shutdownJVM ()

통화 방법 : 전화 자바 클래스 파일 (을 .class 파일)

여기에서 우리는 파이썬 코드에서 자바 클래스를 호출하는 방법을 설명하기 위해 간단한 응용 프로그램 예제를 사용합니다.

우리는 자바 언어의 클래스를 작성했습니다 가정 : PasswordCipher는 기능 이런 종류의 암호화 및 해독 문자열입니다. 그것은 다음과 같이 아웃 바운드 () 함수가 정의 실행할 수있는 인터페이스를 제공합니다 :

공공  클래스 PasswordCipher { 
    ... 
    공공  정적 문자열 실행 (문자열 액션, 문자열 파라) { 
    ... 
    } 
... 
 }

실행 기능의 동작을 나타내는 제 1 파라미터, 제 2 파라미터의 파라 수신 "암호화"표현은 암호화를 수행하여 암호화 수행 결과를 회신하기 위해, 두 개의 매개 변수를 수용한다. 첫 번째 매개 변수는 "해독"암호 해독 작업의 결과 인 경우 항을 반환됩니다. 예외가 발생합니다 기능을 실행할 수 있습니다.

우리 디렉토리에 저장 첫번째 PasswordCipher.class : "F \ 테스트 \ 암호"에서, 다음은 파이썬 언어에서 다음 코드를 작성 :

파이썬 코드

 

수입 jpype 
 jpype로부터의 수입 JavaException 

 jvmPath = jpype.getDefaultJVMPath () jvm.dll을 #the 경로의 
 클래스 경로 = "F : \\ 시험 \\ 암호화"PasswordCipher #the의 경로. 클래스  
 jvmArg = "-Djava.class.path ="+ 클래스 경로 
  경우 () jpype.isJVMStarted하지 : #test JVM이 시작되어 있는지 여부를 
    jpype.startJVM (jvmPath, jvmArg) #START JVM 
 자바 Class = jpype.JClass ( "PasswordCipher") 자바 # 만들기 클래스  
 시도 : 
    TestString에 = "축하합니다"  
    인쇄"원래 문자열은 다음과 같습니다" , TestString에 
    자바의 #call 실행 기능 클래스  
    encryptedString ( "암호화"= javaClass.run TestString에를) 
    인쇄 "암호화 된 문자열은 다음과 같습니다" , encryptedString 

    자바의 #call 실행 기능 클래스를  

    decryptedString = javaClass.run ( "해독" , encryptedString) 
    인쇄 "decryped 문자열 인" , decryptedString 
 JavaException, 전 제외 : 
    인쇄를 "겁에 질린 예외" , JavaException.message () 
    JavaException.stackTrace () 인쇄 
 제외 : 
    인쇄 " 
 알수없는 오류"마지막으로 : 
    JVM 아래 jpype.shutdownJVM () #shut

결과를 얻을 수있는 프로그램을 실행 한 후 :

 

원래의 문자열 입니다 : 축하 
 암호화 된 문자열 입니다 : B0CL + niNYwJLgx / 9tisAcQ ==  
 decryped 문자열 입니다 : 축하

 

 

호출하는 세 가지 방법 : 타사 항아리 패키지를 호출

jpype를 설치하는 1 단계

핍 jpype1 설치

2 단계 쓰기 자바 코드

패키지 mainpro는; 

공용  클래스 안녕하세요 {
     공공  무효 SH () { 
        에서 System.out.println ( "나는 쉬 방법입니다" ); 
    } 
    공공  정적  무효 쇼 () { 
        에서 System.out.println ( "나는 쇼입니다 () 메소드" ); 
    } 
    공공  정적  무효 메인 (문자열 []에 args) { 
        (에서 System.out.println "안녕하세요, 내가 가겠다" ); 
        Hello.show (); 
        안녕 안녕 = 새로운 안녕하세요 (); 
        () hello.sh; 

    } 
}

 

3 단계 항아리 포장

jartest.jar

4 단계는 파이썬 프로그램을 개발

# - * - 코딩 :. UTF-8 - * - 
오기 jpype
 오기 OS 

IF  __name__ == ' __main__ " :
     " "" 
    기본 개발 프로세스가 그대로 다음 : 
    ① 개방 jpype JVM 사용 
    ②, 자바 클래스 로딩 
    ③ 콜 자바 방법 
    ④ (정말 가까이하지 않는 의미에서, 수업 전에로드 언로드) 가까운 JVM 
    "" " 

    #은 ①, 사용 jpype는 (클래스 패스를 켜기 전에 부하에 JVM) 가상 머신을 열 
    #의 부하 방금 포장 된 jar 파일을 
    jarpath =을 os.path .join ((os.path.abspath와 ' . ' ), " D : /tmp/jartest.jar ' ) 

    # 1 파일 경로 jvm.dll을 취득 
    jvmPath = jpype.getDefaultJVMPath () 

    중 #오픈 JVM 
    jpype.startJVM (jvmPath, ' -ea ' , ' -Djava.class.path % S = ' % (jarpath))
     #에 로딩 자바 클래스 (파라미터 이름 길이 자바 클래스 이름) 
    (자바 Class jpype.JClass = ' mainpro.Hello ' ) 

    # 인스턴스화 자바 객체 
    javaInstance = 자바 Class () 

    #이 메소드 호출 인스턴스 
    javaInstance.sh을 ()
     # 클래스와 노래는 정적 메소드를 호출 
    javaClass.show ()
     # 직접 main 메소드를 호출 할 수 없습니다! ! ! ! ! ! ! ? ? 
    # JavaClass.main () 
    
    #의 가까운 JVM 
    jpype.shutdownJVM ()

추천

출처www.cnblogs.com/yoyowin/p/12130937.html