簡體   English   中英

使用 JNI 從 C++ 調用 java 方法

[英]call java methods from C++ using JNI

我想使用 JNI 從 C++ 訪問 java 方法。 我嘗試這段代碼它找不到 java 的 class 文件。我在線程“main”java.lang.NoClassDefFoundError 中得到錯誤異常:這樣的例子

JAVA 代碼


import java.io.*;
import java.util.*;
public class Example {
    public static void main(String[] args) {
        new Example().printHelloWorld();
    }

    public void printHelloWorld() {
        System.out.println("Hello, World!");
    }
}

C++ 密碼是


#include <jni.h>
#include <iostream>
using namespace std;
int main() 
{
    // create JNI environment
    JNIEnv* env;
    JavaVM* jvm;
    JavaVMInitArgs args;
    args.version = JNI_VERSION_1_6;
    JavaVMOption options[1];
    char optionString[] = "-Djava.class.path=";
    options[0].optionString = optionString;
    args.options = options;
    args.ignoreUnrecognized = JNI_FALSE;
    JNI_CreateJavaVM(&jvm, (void**)&env, &args);

    // find class of Java method
    jclass cls = env->FindClass("Example");
    if (env->ExceptionCheck()) {
        env->ExceptionDescribe();
        env->ExceptionClear();
        return 1;
    }
    // get method ID of Java method
    jmethodID mid = env->GetMethodID(cls, "printHelloWorld", "()V");
    if (env->ExceptionCheck()) {
        env->ExceptionDescribe();
        env->ExceptionClear();
        return 1;
    }
    // call Java method
    jobject obj = env->AllocObject(cls);
    env->CallVoidMethod(obj, mid);
    if (env->ExceptionCheck()) {
        env->ExceptionDescribe();
        env->ExceptionClear();
        return 1;
    }
    // clean up and exit
    jvm->DestroyJavaVM();
    return 0;
}

我找不到錯誤。

您可以使用Scapix直接從 C++ header 文件自動生成 Java 綁定。

免責聲明:我是Scapix項目的作者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM