gpt4 book ai didi

java - 使用或存储串行数据并从其他类-Java访问

转载 作者:行者123 更新时间:2023-12-01 04:11:09 25 4
gpt4 key购买 nike

嗨,我是串行编程的新手。我正在尝试将串行数据从一个类返回到另一个类,这是我的代码(使用 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...任何帮助将不胜感激..谢谢

最佳答案

Reading and printing the data in this class is succesful, But accessing the value out of this returns null...

根据您的代码,我看到您正在遵循以下示例:Event Based Two Way Communication (如果你不是那么你应该看一下)。正如其标题所示,它是一种通过串行端口进行基于事件的读/写方式。

话虽如此,我强烈怀疑您正在尝试做这样的事情:

XXX serialPortListener = new XXX();
int light = serialPortListener.send();
int lightStatus = serialPortListener.sendst();

最有可能的是send()sendst()返回null0因为没有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接口(interface):

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处理完成后,观察者将收到通知,并且它将成功读取值。

关于java - 使用或存储串行数据并从其他类-Java访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19904800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com