1

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

4

1 回答 1

0

读取和打印此类中的数据是成功的,但是从中访问值返回null ...

根据您的代码,我看到您正在遵循此示例:基于事件的双向通信(如果不是,那么您应该看看)。正如它的标题所说,它是一种基于事件的通过串行端口读/写的方式。

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

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

最有可能的是send()and sendst()returnnull或者0因为SerialPortEvent在调用这些方法时还没有发生。因此,如果您在事件驱动的场景中工作,那么保留在这个框架中是有意义的。如何?例如实现观察者模式

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());
        }
    }
}

MyObserver3) 将对象附加到XXX实例:

XXX serialPortListener = new XXX();
serialPortListener.addObserver(new MyObserver());

而已。每次SerialPortEvent处理 a 时,都会通知观察者并成功读取值。

于 2013-11-12T22:24:02.140 回答