java - 当我尝试将整数值发送到 Java 函数时 JVM 崩溃

标签 java c java-native-interface

我正在尝试将整数值从 jni c 代码发送到 java 函数。但是当我尝试这样做时,JVM 崩溃了。我不知道原因。以下代码说明了我是如何努力实现这一目标的。

Java 代码:

class Tester {
public native void func();
public native void func_1(Tester T);
public native void func_2(String S);

public static void main(String args[]) {
   Tester tester = new Tester();
   tester.func();
}

public void printInteger(int x) {
    System.out.println(x);
}

static {
  System.loadLibrary("DailyTesters");
}
}

JNI C 代码:

#include <stdio.h>
#include "Tester.h"

void Java_Tester_func
(JNIEnv *env, jobject obj) {
  jclass cls = (*env)->GetObjectClass(env,obj);
  jmethodID mid = (*env)->GetMethodID(env,cls,"printInteger","(I)V");
  jvalue *a1;
  a1->i = 2;
  (*env)->CallVoidMethodA(env,obj,mid,a1);
 }

我犯了什么错误?

最佳答案

试试这个:

void Java_Tester_func
(JNIEnv *env, jobject obj) {
  jclass cls = (*env)->GetObjectClass(env,obj);
  jmethodID mid = (*env)->GetMethodID(env,cls,"printInteger","(I)V");
  jvalue a1,*arr;
  a1.i = 2;
  arr = &a1;
  (*env)->CallVoidMethodA(env,obj,mid,arr);
 }

关于java - 当我尝试将整数值发送到 Java 函数时 JVM 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12756901/

相关文章:

java - 使 JFrame 不重绘

c++ - 线性方程组,带约束的最小二乘法

java - 如何在java中使用SetWindowsHookEx函数?

java - JNI 将 String 转换为 char *,由实例方法返回

c - JNI : undefined symbol GOMP_parallel

java - Android Studio - 无法读取首选项设置

java.sql.SQLException:索引::1 处缺少 IN 或 OUT 参数。我该如何修复这个异常?

java 清除具有透明背景的 JPanel

c - 当预处理器处理预处理器行时会发生什么? - '.i' 文件

不同 cmath log() 和 exp() 实现中的 c 语言对称性?