Ошибка вызова метода Java из собственного C ++ с использованием JNI (ошибка ACCESS_VIOLATION) - PullRequest
0 голосов
/ 21 ноября 2011

У меня проблема: я пытаюсь вызвать метод Java, который должен что-то напечатать в консоли.Он вызывается из родной библиотеки C ++ с использованием JNI.Проблема в том, что он не будет работать, и я получаю эту ошибку:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6c5f5253, pid=4472, tid=4956
#
# JRE version: 6.0_29-b11
# Java VM: Java HotSpot(TM) Client VM (20.4-b02 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  0x6c5f5253
#
# An error report file with more information is saved as:
# C:\location\MyApp\hs_err_pid4472.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

Вот код C ++, который я использую для вызова простого метода Java, который будет печатать строку в консоли:

jclass jTablObjClass = env->FindClass("MainFrame/Jni/TablesObjects");           // get jclass   
jmethodID printMethId = env->GetMethodID(jTablObjClass, "print", "()V");        // get jmethod
env->CallVoidMethod(jTablObjClass, printMethId);                                // call jmethod

Пожалуйста, помогите!^^

1 Ответ

2 голосов
/ 21 ноября 2011

О, только что понял. Вы звоните CallVoidMethod, но первый аргумент - это класс. Если метод является статическим, вы должны использовать GetStaticMethodID и CallStaticVoidMethod, если метод не является статическим, вы должны указать экземпляр объекта, а не класс.

...