希望你做得很好。
我有一个C语言的JNI实现,其中一个C函数连接到当前JVM线程并回调一个Java方法,这实际上是在attachCurrentThread()函数调用时使JVM崩溃。我的实现基于链接中给出的答案,保持对JNIEnv环境的全局引用
线程创建部分,它将侦听套接字连接以接受事件并注入GetEvent函数。
// create thread for reading from socket.
pthread_attr_init(&plafParams->readThreadAttr);
pthread_attr_setdetachstate(&plafParams->readThreadAttr, PTHREAD_CREATE_JOINABLE);
pthread_attr_setstacksize(&plafParams->readThreadAttr, 16384);
plafParams->eventThreadFlag = 2;
if(pthread_create(&plafParams->hReadThread_p, &plafParams->readThreadAttr, ( void * ) plafIncomingPortReadThread, ( void * ) dlmsInstance))
{
plafFree(plafParams);
return FAILURE;
}
//create thread to read from platform (to monitor wrapperRecv() process)
pthread_attr_init(&plafParams->EventthreadAttr);
pthread_attr_setdetachstate(&plafParams->EventthreadAttr, PTHREAD_CREATE_JOINABLE);
pthread_attr_setstacksize(&plafParams->EventthreadAttr, 16384);
if( pthread_create(&plafParams->EventThreadHandle_p, &plafParams->EventthreadAttr, ( void * ) IncomingPortEventReadHandling, ( void * ) dlmsInstance))
{
pthread_attr_destroy(&plafParams->readThreadAttr);
plafParams->eventThreadFlag = 0;
return FAILURE;
}
static JavaVM *jvm;
// Caching the JVM on JVM OnLoad
jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
JNIEnv* jenv;
version = (*vm)->GetEnv(vm, (void **) &jenv, JNI_VERSION_1_6);
jvm = vm;
printf("\n jvm = %d \n",rs);
if(rs == JNI_OK) {
printf("\n JNI_OK \n");
}
}
回调函数
void GetEvent(unsigned char *msg)
{
printf("\n Processing event data \n");
JNIEnv *env;
printf("\n Before attaching JVM thread \n");
jint rs = (*jvm)->AttachCurrentThread(jvm, &env, NULL); // JVM crashes here, tried with jint rs = (*jvm)->AttachCurrentThread(jvm, (void **) &env, NULL), nothing helps
printf("\n After attaching JVM thread \n");
}
在接收到事件时执行GetEvent()后,我的JVM在AttachMoney tThread()函数调用时崩溃。有人能帮我找出问题吗?事先感谢,如有任何建议,将不胜感激。
问候,
萨拉瓦南G
我猜你的Thread已经可以附加到VM了,所以不需要AttachMoney tThread。也许你只需要像这样检查线程状态:
如何获取异步调用的JNI接口指针(JNIEnv*)
我目前正在使用OpenGL和GLFW开发一个跨平台的2D渲染引擎。我有一个名为GameWindow的基本窗口类,以及一个名为Game的继承GameWindow的类。游戏覆盖了基类中的一些虚拟方法,以便GameWindow可以处理帧限制等。在GameWindow的构造函数中,我使用glfwSetWindowSizeCallback指定窗口调整大小时要运行的方法。然后,此方法调用GameWindow的
问题内容: 我有一个第三方.NET Assembly和一个大型Java应用程序。我需要从Java应用程序调用.NET类库提供的方法。该程序集不支持COM。我已经搜索过网络,到目前为止,我有以下内容: C#代码(cslib.cs): 编译使用(使用.net 3.5,但使用2.0时也会发生同样的情况): C ++代码(clib.cpp): (使用VC 2008工具进行编译),但使用2003工具时也会发
问题内容: 一天前,经过几个月的正常工作,我们的Java应用偶尔会因以下错误而崩溃: 我查看了hs_err_pid2075.log,发现有一个活动线程正在处理网络通信。但是,最近几个月没有进行任何应用程序或环境更改。也没有任何负载增长。我该怎么做才能了解崩溃的原因?有没有一些通用的步骤来调查jvm崩溃? UPD http://www.wuala.com/ubear/public 问题答案: 崩溃发
我有以下设置: docker集线器上的docker映像Kubernetes集群(有4个节点,每个节点大约50GB RAM)和大量资源 我按照教程将图像从dockerhub拉到kubernetes 这导致pod进入< code>CrashLoopBackoff < code > docker run-it-p 8080:9546 OMG/telperion 工作正常。 所以我的问题是这个可以调试吗?
我有一个Selenium集线器,其中6个节点基于该平台注册如下: > 3平台作为WIN10 3平台作为VISTA 有没有办法通过提及OSname在平台上调用chrome浏览器,我已经尝试了几个选项,但看起来集线器随机调用驱动器而不是基于操作系统版本。 任何洞察都会有所帮助。在某些情况下,当我提到WIN10的chrome驱动程序时,chrome驱动器崩溃,如下所示: 节点注册如下: 和 如果能帮助解
问题内容: 这是启动桌面版本时得到的: 我都试过这个政党成员和这一个,我也得到了同样的错误在同一直线上。 编辑: 我只是注意到我的.tmx文件的数据是由Tiled Map Editor自动编码的,所以我只是停用了它,但仍然遇到相同的错误。 如果我复制/粘贴该项目(我的意思是整个项目,不仅是render()方法),它会工作,但是当我尝试在自己的项目中加载自己的地图时,它只会崩溃… 因此,在那之后,我