0

我想将从串口接收到的数据存储在一个字符串变量中,该变量将在另一个类中访问。我编写了打印从 com 端口接收到的数据的代码,但是当从它返回的方法中访问变量时null..请帮帮我..我正在为此使用 RxTx 库。

public class ProtocolImpl implements Protocol {  

    byte[] buffer = new byte[1024];  
    int tail = 0;  
    public String message;

    public void onReceive(byte b) {  
        // simple protocol: each message ends with new line  
        if (b=='\n') {  
            onMessage();  
        } else {  
            buffer[tail] = b;  
            tail++;  
        }  
    }  

    public void onStreamClosed() {  
        onMessage();  
    }  

    /* 
     * When message is recognized onMessage is invoked  
     */  
    private void onMessage() {  
        if (tail!=0) 
        {  
            // constructing message  
            message = getMessage(buffer, tail);  
            //rmess = message;
            System.out.println("RECEIVED MESSAGE: " + message);  

            if ("KITM".equalsIgnoreCase(message)) {  
                CommPortSender.send(getMessage("OK"));  
            } 
            tail = 0;  
        }  
    }  

    public String rmess() /*this method is returning null.. please help me out*/
    {
        if (tail!=0) {  
        message = getMessage(buffer, tail); 
        }
        return message;
    }

    // helper methods   
    public byte[] getMessage(String message) {  
        return (message).getBytes();  
    }  

    public String getMessage(byte[] buffer, int len) {  
        return new String(buffer, 0, tail);  
    }  
}
4

2 回答 2

1

您正在使用实例变量 message。每个ProtocolImpl对象都有一个此变量的实例。据推测,被调用的ProtocolImpl对象onMessage是被调用的不同ProtocolImpl对象rmess

简单的解决方法是创建message一个静态变量,以便在整个程序中只有该变量的一个实例。但是要小心,这可能会导致一些微妙的问题,例如同步和对象独立性。更好的解决方案是确保您使用相同的ProtocolImpl对象同时调用onMessagermess

于 2012-07-24T20:37:34.717 回答
0

您的消息对象未序列化,因此您收到的消息为空。您可以实现 java.io.Serializable

于 2012-07-25T06:55:08.943 回答