OpenNI UserTracker.java示例崩溃

15

我已经从Github上构建了OpenNI和Sensor的源代码,并安装了Nite。我在带有2.6.39内核的Debian上以及不同版本的Java上进行了测试,还在另一台带有Lubuntu 11.04的计算机上进行了测试,同样使用了OpenNI不稳定版和avin2 Sensor - 结果相同。我也尝试过使用预编译的二进制文件。

C++和.NET中的UserTracker示例运行正常,但是当我执行校准动作时,UserTracker.java会检测到我的轮廓,然后JVM崩溃。这是崩溃前的输出:

New user 1
Pose Psi detected for 1
我已经尝试过修改代码,但是找不到导致它崩溃的那段代码——PoseDetectedObserver.update没有出错。
这里是有关该示例的链接:https://github.com/OpenNI/OpenNI/blob/master/Samples/UserTracker.java/org/OpenNI/Samples/UserTracker/UserTracker.java 是否有其他人遇到了这个问题,或者知道可能出了什么问题?
编辑:我已经在SamplesConfig.xml中打开了日志记录,Java示例在启动时输出这些警告,而C++和.NET示例只有最后一个 - 这是我在日志中找到的唯一区别。
  125 INFO       OpenNI version is 1.3.2 (Build 3)-Linux-x86 (Jul 28 2011 03:43:14)
  141 INFO       Filter Info - minimum severity: WARNING, masks: ALL
 2482 WARNING    Failed loading lib: /usr/lib/libXnVFeatures_1_3_0.so: undefined symbol: xnOSStrFormat

 2489 WARNING    Failed to load '/usr/lib/libXnVFeatures_1_3_0.so' - missing dependencies?
 4080 WARNING    Failed loading lib: /usr/lib/libXnVHandGenerator_1_3_0.so: undefined symbol: xnOSStrFormat

 4087 WARNING    Failed to load '/usr/lib/libXnVHandGenerator_1_3_0.so' - missing dependencies?
 7581 WARNING    Open named event: failed to open key file (2) - event might not exist...

编辑2:我现在设置了一份悬赏,并附上了最新不稳定版本的OpenNI、NITE和avin2的SensorKinect在Lubuntu 11.04上产生的详细日志文件和转储:http://pastebin.com/anG18agp http://pastebin.com/mAkf0G6M


1
你尝试过使用Sun JVM吗?使用最新的1.6版本了吗? - sbridges
是的,我目前正在使用Sun Java 1.6.0_26,但我也尝试过OpenJDK 6和7...我认为问题出在那些无法正确加载的.so文件上,因为这是我在C++和Java示例之间在详细日志中找到的唯一区别。 - HairyFotr
1个回答

6

在OpenNI的Java包装类中存在错误:

在org_OpenNI_NativeMethods.cpp文件中读取如下内容:

void XN_CALLBACK_TYPE PoseDetectionHandler(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, void* pCookie)
{
    CallbackCookie* pCallback = (CallbackCookie*)pCookie;
    JNIEnvSupplier supplier;
    jstring jPose = supplier.GetEnv()->NewStringUTF(strPose);
    supplier.GetEnv()->CallVoidMethod(pCallback->obj, pCallback->mid, jPose, user);
    supplier.GetEnv()->ReleaseStringUTFChars(jPose, strPose);
}

但是你不应该释放使用newStringUTF分配的字符串...因此它会崩溃.. 这里有一个例子:http://www.velocityreviews.com/forums/t144581-crash-while-calling-releasestringutfchars-for-newstringutf-string.html 获取源代码...取消注释发布行...构建OpenNI.jni.dll并运行usetracker.java!
最好的问候, 大卫

我尝试构建Openni源代码,但出现了一些奇怪的错误。您是否有这个OpenNI.jni.dll?您能把它邮寄给我吗?我正在使用win64。 - cooltechnomax
cooltechnomax,我无法帮助你...请尝试在OpenNI组http://groups.google.com/group/openni-dev上发布问题和错误信息...这种情况下评论太短了,那里有更多的人可以阅读。 - HairyFotr
哦,已经在Github上创建了包装器修复的pull request,但尚未关闭:https://github.com/OpenNI/OpenNI/pull/35 - HairyFotr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接