繁体   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