Сбой образцов OpenTI UserTracker.java
Я построил OpenNI и Sensor из источника на Github и установил Nite. Я тестировал это на Debian с ядром 2.6.39 и с разными версиями Java, а на другом компьютере с Lubuntu 11.04, а также с OpenNI unstable и avin2 Sensor - тот же результат. Я также тестировал с помощью предварительно созданных двоичных файлов.
Образец UserTracker в С++ и .NET работает, но работает 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
Кто-нибудь еще столкнулся с этой проблемой или, возможно, видит, что может быть неправильным?
edit: я включил ведение журнала в SamplesConfig.xml и образцы Java
выведите эти предупреждения при запуске, а образцы С++ и .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: теперь я установил щедрость и вот подробный файл журнала и дамп из последних нестабильных версий OpenNI, NITE и avin2 SensorKinect на Lubuntu 11.04: http://pastebin.com/anG18agp http://pastebin.com/mAkf0G6M
Ответы
Ответ 1
есть ошибка в классах оболочки Java OpenNI:
В 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);
}
Но вы не должны выпускатьStringUTF строку, выделенную с помощью newStringUTF... поэтому она вылетает.
См. Здесь пример: http://www.velocityreviews.com/forums/t144581-crash-while-calling-releasestringutfchars-for-newstringutf-string.html
Получить исходный код... Раскомментировать строку выпуска.. build OpenNI.jni.dll и usetracker.java будет запущен!
С уважением,
Дэвид