您好我是串口编程的新手。我正在尝试将串行数据从一个类返回到另一个类,这是我的代码(使用RXTX库)
class XXX implements SerialPortEventListener{
final int[] val = new int[2];
public synchronized void serialEvent(SerialPortEvent oEvent) {
String storeId;
String status;
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String inputLine = input.readLine();
String[] arrayValues = inputLine.split(" ");
storeId=arrayValues[0];
status=arrayValues[1];
light=Integer.parseInt(storeId);
lightstatus = Integer.parseInt(status);
//System.out.println(light);
//System.out.println(status);
val[0] = light;
val[1] = lightstatus;
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
public int send(){
return val[0];
}
public int sendst(){
return val[1];
}
}
在这个类中读取和打印数据是成功的,但是访问该值会返回null ...任何帮助都将被赞赏.Thankyou
答案 0 :(得分:0)
在这个类中读取和打印数据是成功的,但是 从中获取值将返回null ...
根据您的代码,我看到您正在关注此示例:Event Based Two Way Communication(如果您不是,那么您应该看看)。正如其标题所说,这是一种基于事件的串口读/写方式。
话虽如此,我强烈怀疑你是在尝试这样做:
XXX serialPortListener = new XXX();
int light = serialPortListener.send();
int lightStatus = serialPortListener.sendst();
send()
和sendst()
最有可能返回null
或0
,因为调用这些方法时尚未发生SerialPortEvent
。因此,如果您在事件驱动的场景中工作,那么保持这个框架是有意义的。怎么样?例如,实施Observer pattern:
1)让XXX
类从Observable
延伸并执行这个小改动:
public class XXX extends Observable implements SerialPortEventListener {
int[] val = new int[2];
public synchronized void serialEvent(SerialPortEvent oEvent) {
String storeId;
String status;
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
// all your code here
setChanged();
notifyObservers();
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
...
}
2)另一个类必须实现Observer
接口:
public class MyObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
if(o instanceof XXX){
XXX observable = (XXX) o;
System.out.println("Light: " + observable.send());
System.out.println("Light status: " + observable.sendst());
}
}
}
3)将MyObserver
对象附加到XXX
实例:
XXX serialPortListener = new XXX();
serialPortListener.addObserver(new MyObserver());
就是这样。每次处理SerialPortEvent
时,观察员都会收到通知,并且会成功读取值。