很抱歉我的问题不清楚。我应该给出一些我正在使用的代码。请参考以下链接:
http://www.arduino.cc/playground/Interfacing/Java
基本上,这个示例代码与那些经典的 rxtx 示例不同,这些示例通过在某些函数上声明“同步”关键字在串行端口上进行基于事件的通信。我正在处理的唯一部分是在串行事件侦听器中:
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
////////////////////////////////////
1) I will parse the incoming data into an integer array
2) this array will be shared with other classes, let me
explain some of them below.....
////////////////////////////////////
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
功能A:一个使用这个共享数组中的数据做2D/3D图形的小程序。
功能 B:GUI 将从共享数组计算的一些数字输出/打印到 jframe 中的文本区域。它还可以通过按钮打开 Function A 小程序。但是 GUI 中有一些按钮会改变函数 A 中的一些变量,从而导致函数 A 处理共享数组的行为不同。
这就是我要的:
随着串行数据传入并解析到数据数组中......
1) 函数 B 将立即打印与此数据数组关联的数字。只有当用户点击按钮显示功能 A 小程序时,功能 A 才会显示 2D/3D 图形。
2) 当函数 A 和 B 都处于活动状态时,它们自己的变量会随着传入的串行数据而变化。
我希望函数 A 和 B 立即捕获共享数据数组中的更改,因为它在 serialEvent() 中发生更改。我知道最简单的方法是将数据数组作为引用传递,并在下一个传入数据可用之前调用每个函数。但是有Grodriguez之前提到的问题. 功能 A 或 B 正在进行时,可能会丢失一些传入数据。几年前我在 java 中做了一些关于 MVC 的事情,它使用不同类或 GUI 之间的 obervables 来显示温度。就像我在文本框中输入温度一样,带有滑块的另一个 GUI 将更改为输入温度。当我在此处更改滑块时,它将更改另一个 GUI 中的温度数字。连续事件让我想起了这里的这个应用程序。我不确定这是否是在这里应用的最佳方法,或者可能有其他更好、更简单的方法来完全按照我的意愿行事。
再次感谢您的耐心等待。