Запуск 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 (используется для запуска обработки в затмении)
  • SimpleOpenNI.jar

Имея все это, и настраивая первый Эскиз Обработки как

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 workspace) в качестве рабочей области ошибка исчезает, но при попытке запуска эскиза в консоли выводится следующая ошибка:

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? Кто-нибудь может сказать мне, что именно означает эта ошибка?

1 ответ

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

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

Другие вопросы по тегам