Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从本机C+;调用Java方法时出错+;使用JNI(访问违反错误)_Java_C++_Methods_Java Native Interface - Fatal编程技术网

从本机C+;调用Java方法时出错+;使用JNI(访问违反错误)

从本机C+;调用Java方法时出错+;使用JNI(访问违反错误),java,c++,methods,java-native-interface,Java,C++,Methods,Java Native Interface,我遇到了一个问题:我试图调用一个java方法,该方法应该在控制台中打印一些东西。它是用JNI从C++本地DLL调用的。 问题是它不起作用,我得到一个错误: # # 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_

我遇到了一个问题:我试图调用一个java方法,该方法应该在控制台中打印一些东西。它是用JNI从C++本地DLL调用的。 问题是它不起作用,我得到一个错误:

#
# 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

求求你,救命^^

哦,刚刚意识到。您正在调用
CallVoidMethod
,但第一个参数是一个类。如果该方法是静态的,则应使用
GetStaticMethodID
CallStaticVoidMethod
,如果该方法不是静态的,则应给出一个对象实例,而不是类。

添加返回值检查以找出故障的确切位置。如果返回值不为null,则检查所有返回值。事实上,崩溃的根源是对void java方法
env->CallVoidMethod(jTablObjClass,printMethId)的调用
但实际上它没有崩溃的理由,所以…
jTablObjClass
printMethId
不为空?我如何检查该plz?有我应该使用的函数吗?
如果(jTablObjClass==NULL){报告一个错误并做一些事情}
非常感谢!你太棒了!我尝试将java方法设置为“static”,在我的C++代码中,我调用了<代码> GestStAdMeodod,然后调用<代码> CallStaticVoidMethod < /C> >,它实际上已经解决了!^ ^非常感谢你!