Запуск 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 на вашем ПК.