1

我们有一个项目,希望通过 Microsoft Kinect 传感器控制 Lego Mindstorms 机器人。我们决定使用 SimpleOpenNI with Processing 来读取传感器并使用 leJOS 来控制机器人,原因很简单:因为两者都是 Java 语言,我们可以指定一种RoboHandler并从传感器读取类中调用它的方法。

为了实现这一点,我们为 Eclipse 下载了 leJOS 插件,创建了一个新的 leJOS NXT 项目,并将处理和 SimpleOpenNI 库放在构建路径中。请注意,要使用 SimpleOpenNI,需要没有 Java 的旧处理版本。

现在的问题是,安装 leJOS 时,它严格要求 32 位 Java JDK,所以我不得不下载这个并在安装时指向它。

此时,项目中有以下构建路径:

  • LeJOS NXT Runtime(其中包含 java.awt 类)
  • core.jar(用于在eclipse中运行Processing)
  • 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

当我下载 Processing without Java 版本时,我无法选择 32 位或 64 位版本。SimpleOpenNI 安装为 64 位版本。

当也将 64bit-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?谁能告诉我这个错误到底是什么意思?

4

1 回答 1

2

您正在将设计用于在 NXT 砖上与 JVM 一起运行的类(即 classes.jar 中的所有内容)与设计用于在 PC 上与完全成熟的 JVM 一起运行的类混合使用。不要那样做。如果您想远程控制 NXT,请使用 pccomms.jar 和 lib/pc 中的所有其他内容。但是,当您在 PC 上启动 Java 程序时,切勿将 classes.jar 或 lib/nxt 中的任何其他内容添加到类路径中。

关于java.lang.Thread的错误信息可能是因为classes.jar中的java.lang.Thread与你PC上JVM自带的java.lang.Thread不兼容。

于 2013-01-17T21:11:15.290 回答