我在Github上从源代码构建了OpenNI和Sensor并安装了Nite。我已经在Debian上使用2.6.39内核和不同版本的Java进行了测试,并在另一台使用Lubuntu 11.04和OpenNI unstable和avin2 Sensor的计算机上进行了测试 - 结果相同。我还测试了预建的二进制文件。
C ++和.NET中的UserTracker示例有效,但UserTracker.java运行,检测我的轮廓,然后当我做出校准姿势时JVM崩溃。这是崩溃前的输出:
New user 1
Pose Psi detected for 1
我尝试过使用代码,但是我找不到导致它的代码片段 - 它不会在PoseDetectedObserver.update
中崩溃。
有没有其他人遇到过这个问题,或者看到可能出现的问题?
编辑:我已经开启了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...
edit2:我现在设置了一个赏金,这里是一个详细的日志文件,并从Lubuntu 11.04上最新的不稳定版OpenNI,NITE和avin2的SensorKinect转储:http://pastebin.com/anG18agp http://pastebin.com/mAkf0G6M
答案 0 :(得分: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!
祝你好运, 大卫