Запуск SimpleOpenNI и leJOS в одном проекте

У нас есть проект, в котором мы хотим управлять роботом Lego Mindstorms с сенсором Microsoft Kinect. Мы решили использовать SimpleOpenNI с Processing для чтения датчика и leJOS для управления роботом по простой причине: поскольку оба написаны на Java, мы можем указать своего рода RoboHandler и вызвать его методы из класса чтения датчика.

Для этого мы загрузили подключаемый модуль leJOS для eclipse, создали новый проект leJOS NXT и поместили библиотеки обработки и SimpleOpenNI в путь сборки. Обратите внимание, что для использования SimpleOpenNI требуется старая версия обработки без Java.

Теперь проблема в том, что при установке leJOS строго требуется 32-битный Java JDK, поэтому мне пришлось скачать его и указать на него при установке.

На данный момент в проекте есть следующие пути сборки:

  • LeJOS NXT Runtime (в котором, среди прочего, есть классы java.awt)
  • core.jar (используется для запуска Processing в eclipse)
  • SimpleOpenNI.jar

Имея все это и настроив первый скетч Processing, например

import processing.core.*;

public class Test extends PApplet{
    (....)
}

приводит к следующему коду ошибки:

Multiple markers at this line
    - The type java.awt.event.MouseMotionListener cannot be resolved. It is indirectly referenced from 
     required .class files
    - The type java.applet.Applet cannot be resolved. It is indirectly referenced from required .class files
    - The type java.awt.event.MouseListener cannot be resolved. It is indirectly referenced from required .class files
    - The hierarchy of the type FirstTry is inconsistent
    - The type java.awt.event.FocusListener cannot be resolved. It is indirectly referenced from required .class files
    - The type java.awt.event.KeyListener cannot be resolved. It is indirectly referenced from required .class files

Когда я загрузил версию «Обработка без Java», я не смог выбрать 32-битную или 64-битную версию. SimpleOpenNI устанавливается как 64-битная версия.

При добавлении 64-битного JDK (рабочая область eclipse по умолчанию) в качестве рабочей области ошибка исчезает, но при попытке запустить скетч в консоли выводится следующая ошибка:

Invalid layout of java.lang.Thread at name
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (javaClasses.cpp:128), pid=9176, tid=8740
#  fatal error: Invalid layout of preloaded class
#
# JRE version: 7.0_04-b22
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0-b21 mixed mode windows-amd64 compressed oops)
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\Valentino\Desktop\workspaces\workspace_processing\RoboZeugs\bin\hs_err_pid9176.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#

Так что, на мой взгляд, есть проблема с версиями JDK (32- и 64-битная), но должен быть способ справиться с этим. Есть ли у кого-нибудь опыт работы по этой конкретной теме, может быть, даже с Kinect -> Mindstorms? Кто-нибудь может сказать мне, что означает эта ошибка точно?


person Valentino Ru    schedule 03.01.2013    source источник


Ответы (1)


Вы смешиваете классы, предназначенные для работы с JVM на блоке NXT (т. е. все, что содержится в class.jar), с классами, предназначенными для работы с полноценной JVM на ПК. Не делай этого. Если вы хотите удаленно управлять NXT, используйте pccomms.jar и все остальное в lib/pc. Но никогда не добавляйте class.jar или что-то еще в lib/nxt в путь к классам, когда вы запускаете Java-программу на своем ПК.

Сообщение об ошибке о java.lang.Thread, вероятно, связано с тем, что java.lang.Thread в class.jar никоим образом не совместим с java.lang.Thread, который поставляется с JVM на вашем ПК.

person Sven    schedule 17.01.2013