>  기사  >  백엔드 개발  >  C 애플리케이션에서 Java 메소드를 호출하는 방법은 무엇입니까?

C 애플리케이션에서 Java 메소드를 호출하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-17 09:46:04675검색

How to Call Java Methods from C   Applications?

C 애플리케이션에서 Java 메소드 호출

크로스 플랫폼 개발 영역에서는 C 애플리케이션이 Java 메소드에서 제공하는 기능에 액세스해야 하는 경우가 있습니다. 이 쿼리는 이러한 통합을 달성하기 위한 타당성과 미묘한 차이를 탐구합니다.

타당성 및 메커니즘

예, C/C 코드 내에서 Java 메소드를 호출할 수 있습니다. 그러나 절차는 다소 복잡하며 반사적이고 유형이 안전하지 않은 접근 방식을 따릅니다.

C API(응용 프로그래밍 인터페이스)는 이러한 통합을 달성하기 위한 더 깔끔한 방법을 제공합니다. 이 접근 방식에는 C 코드 내에서 JVM(Java Virtual Machine)을 인스턴스화하는 작업이 포함됩니다. 네이티브 코드가 Java에서 호출되는 시나리오에서는 VM 인스턴스를 구성할 필요가 없습니다.

구현

제공된 코드 조각은 C에서 Java 메서드를 호출하는 방법을 보여줍니다. 애플리케이션:

#include <jni.h>
#include <stdio.h>

int main() {
    JavaVM *vm;  // Pointer to JVM
    JNIEnv *env;  // JNI interface to interact with JVM
    JavaVMInitArgs vm_args;  // JVM initialization arguments

    // Initialize JVM arguments
    vm_args.version = JNI_VERSION_1_2;
    vm_args.nOptions = 0;
    vm_args.ignoreUnrecognized = 1;

    // Construct a Java Virtual Machine
    jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);

    // Create a Java string object
    jstring jstr = env->NewStringUTF("Hello World");

    // Get the "java/lang/String" class
    jclass clazz = env->FindClass("java/lang/String");

    // Get the "toLowerCase()" method ID
    jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;");

    // Invoke the "toLowerCase()" method on the string object
    jobject result = env->CallObjectMethod(jstr, to_lower);

    // Convert the Java string to a C-style string
    const char* str = env->GetStringUTFChars((jstring) result, NULL);

    // Print the converted string
    printf("%s\n", str);

    // Release the C-style string
    env->ReleaseStringUTFChars(jstr, str);

    // Destroy the Java Virtual Machine
    vm->DestroyJavaVM();

    return EXIT_SUCCESS;
}

크로스 플랫폼 컴파일

Ubuntu에서 크로스 플랫폼 컴파일을 하려면 다음 명령을 실행하세요.

g++ -I/usr/lib/jvm/java-6-sun/include \ 
-I/usr/lib/jvm/java-6-sun/include/linux \ 
-L/usr/lib/jvm/java-6-sun/jre/lib/i386/server/ -ljvm jnitest.cc

오류 처리

다음 명령을 실행하는 것이 중요합니다. 적절한 오류 처리에 사용되는 모든 메소드의 반환 코드를 확인하십시오. 예를 들어, 다음 코드 조각은 C 스타일 문자열을 검색할 때 잠재적인 메모리 할당 문제를 확인합니다.

str = env->GetStringUTFChars(jstr, NULL);
if (str == NULL) {
    return EXIT_FAILURE; /* out of memory */
}

위 내용은 C 애플리케이션에서 Java 메소드를 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.