需要帮助和想法解决收集问题

时间:2010-07-28 19:42:39

标签: java outputstream lejos-nxj

我今天已经发布了一个问题。这个问题是关于同一个项目但不相关的。我正在为Lego NXT Mindstorm机器人开发一个应用程序。我有两个机器人和一台在PC上运行的GUI。

在leJOS NXJ中,您只能使用一个输入阅读器。这意味着您无法直接将PC连接到两个机器人,并让两个机器人直接相互连接。所以这就是我所做的。我已将PC直接连接到两个机器人,当两个机器人想要直接通信时,我会通过GUI发送消息。

GUI和机器人之间以及机器人之间存在大量的通信。出于这个原因,无论何时我将数据写入输出流,似乎某些数据被其他数据覆盖,并且系统无法正常工作。

我一直建议编写一个包含集合(Queue)对象的类,这样每当机器人想要发送内容时,它就会将它添加到集合(Queue)中,并从该类中保存集合对象,将是一个方法,以便它不断地检查集合,并且当它不为空时,它将集合中的数据发送到输出流。

这意味着只要集合中的数据被发送到输出流,就有可能添加新数据。

有些人建议我使用ArrayBlockQueue等等。但是这些类在机器人使用的class.jar文件中不可用。

我在这个jar文件中知道的集合类是Vectors和Queue。

我在问我是否可以通过向我提供如何实施此课程的想法来帮助我。类中的方法将不时检查集合中是否有数据,并且它将通过输出流发送它们。在发送时,可能会添加新元素。

由于数据是从一个地方发送的,因此没有数据会覆盖另一个数据。这对我来说是一个好主意。

欢迎您提出所有建议。

感谢。

1 个答案:

答案 0 :(得分:0)

矢量很好,因为(至少在JavaSE中 - 我不知道Mindstorms使用的是什么)它是同步的,所以所有调用都是原子的 - 如果另一个线程试图在向它移除时向Vector添加内容,它将阻止,直到你完成,避免数据丢失的问题。

或者,您可能希望查看Collections类中的synchronization wrappers

或者,您可以通过继承标准队列来执行自己的阻塞队列实现。虽然更复杂,但阻塞队列是一个更好的解决方案,因为它可以避免繁忙的等待,您可以反复检查队列,并且每次都告诉它是空的。