Java Lejos 自主 NXJ 机器人线程造成问题

Java Lejos autonomous NXJ-robot threads causing trouble

我正在编写一个 java 代码来控制一个相当简单的机器人,它应该执行以下操作; PID-linefollower,超声波检测,颜色检测。

由于这是我在 java 中的第一个程序,我显然在 OOP 方面有很多东西要学习。

机器人 运行 在一条轨道上,该轨道上的线条伴随着道路上的颜色,机器人应定期检查,如果发现,根据它读取的颜色采取不同的行动。

所以这个过程应该运行有点像下面的伪(java)代码:

Initialize and calibrate sensors.
while (! Button.ENTER.isDown)
Run PID-controller
If (ColorSensorColor = 0 || ColorSensorColor = 2)
    if (color = 0)
        turn left
    if (color = 2)
        turn right
while (UltraSonicDistance < 30cm)
    free-roll motors

因此我的问题是;我如何构建两个线程,可以 运行 ColorSensor 和 UltraSonicSensor 与主线程并行?

最新实际代码位于here

最后,感谢您的所有投入 - 我已经在 interwebz 上搜索了很好的教程,但似乎我的脑细胞太少,无法理解所有 OOP 之母。

/u/evil_burrito 在 /r/javahelp kindle 上回答了以下工作建议:

首先,您可能想要考虑实时 JVM,如果您还没有的话。如果您的控制器必须 运行 不间断,则可能需要考虑。 FWIW,RT 根本不是我的专业领域。 但是,您关于线程的基本问题更容易回答。 为每个超声波传感器和颜色传感器创建一个内部 class。让那些 classes 实现 Runnable。在 运行 方法中,检查适当的传感器并更新外部 class 中的易失性变量。 使用 ScheduledExecutorService 对这些 classes 中的每一个执行传感器检查(创建内部 class 的实例并将其提交给执行程序 运行,间隔为 1ms 或 100 微秒, 管他呢)。 主要class 可以只监视volatile 变量的值并决定做什么w/o 中断。