что не так с этим вызовом java-метода?

Я пытаюсь вызвать метод Java из кода. Код C прослушивает нажатие клавиши Escape, Shift, Ctrl, затем вызывает метод Java, сообщающий, какая клавиша была нажата. Ниже приведены фрагменты, которые играют роль в этом.

Фрагмент C:

mid = (*env)->GetMethodID(env,cls,"callBack","(Ljava/lang/String;)V");
Env = env;
if(called)
    switch(param) {
        case VK_CONTROL:
            printf("Control pressed !\n");
            (*Env)->CallVoidMethodA(Env,Obj,mid,"11"); // calling the java method
            break;
        case VK_SHIFT:
            printf("Shift pressed !\n");
            (*Env)->CallVoidMethodA(Env,Obj,mid,"10"); // calling the java method
            break;
        case VK_ESCAPE:
            printf("Escape pressed !\n");
            (*Env)->CallVoidMethodA(Env,Obj,mid,"1B"); // calling the java method
            break;
        default:
            printf("The default case\n");
            break;
    }

Фрагмент Java:

public void callBack(String key) {
    String x = KeyEvent.getKeyText(Integer.parseInt(key, 16));
    System.out.println(x);
}

Когда я запускаю программу и нажимаю клавишу Escape, я получаю это в консоли:

Escape pressed !
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x5c8b809a, pid=7588, tid=8088
#
# JRE version: 7.0
# Java VM: Java HotSpot(TM) Client VM (20.0-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# V  [jvm.dll+0x19809a]
#
# An error report file with more information is saved as:
# W:\UnderTest\NetbeansCurrent\KeyLoggerTester\build\classes\hs_err_pid7588.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

Я знаю, что вызываю функцию Java неправильно, но я не знаю, где я не прав. Что касается вывода, он удовлетворяет случаю, когда я нажимаю клавишу Escape , а затем возникает непредвиденная ошибка.

Ссылка на LOG-ФАЙЛ

РЕДАКТИРОВАТЬ:

После ответа mavroprovatoя все еще получаю те же ошибки.

Я редактировал следующим образом:

(*Env)->CallVoidMethodA(Env,Obj,mid,(*Env)->NewStringUTF(Env,"1B"));

РЕДАКТИРОВАТЬ:

ПОЛНЫЙ КОД версии 1

ПОЛНЫЙ КОД версии 2

5
задан Community 23 May 2017 в 12:09
поделиться