使用或存储来自其他类Java的串行数据和访问

时间:2013-11-11 11:07:06

标签: java serial-port rxtx

您好我是串口编程的新手。我正在尝试将串行数据从一个类返回到另一个类,这是我的代码(使用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

1 个答案:

答案 0 :(得分:0)

  

在这个类中读取和打印数据是成功的,但是   从中获取值将返回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接口:

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时,观察员都会收到通知,并且会成功读取值。