Java Xbee API-数据包侦听器似乎无法工作

Java Xbee API-数据包侦听器似乎无法工作,java,xbee,Java,Xbee,我有一个类正在尝试从与Arduino板连接的其他XBEE读取数据包。下面是课堂: public class XbeeReceiver2 { private XBee xbee; private int[] payloadToSend; private int[] payloadReceived; private Queue<XBeeResponse> queue = new ConcurrentLinkedQueue<XBeeResponse&

我有一个类正在尝试从与Arduino板连接的其他XBEE读取数据包。下面是课堂:

public class XbeeReceiver2 {

    private XBee xbee;
    private int[] payloadToSend;
    private int[] payloadReceived;
    private Queue<XBeeResponse> queue = new ConcurrentLinkedQueue<XBeeResponse>();
    public XBeeResponse response;
    private final static Logger LOGGER = Logger.getLogger(XbeeReceiver2.class .getName());

    public XbeeReceiver2(){
        xbee = new XBee();
    }

    public void openXbeeConnection(String portNumber){

        try {

            xbee.open(portNumber, 9600);
            xbee.addPacketListener(new PacketHandler());

        }   catch (XBeeException e) {

          System.out.println("" + portNumber + " - connection problems");

            e.printStackTrace();
        }    

    };

    public void readPacket(){

        System.out.println(queue.isEmpty());

        while((response = queue.poll()) != null){   
        try {
            response = xbee.getResponse();

            LOGGER.info("received response " + response.toString());

            if (response.getApiId() == ApiId.ZNET_RX_RESPONSE){

                ZNetRxResponse rx = (ZNetRxResponse) response;

                payloadReceived = rx.getData();
                }
        } catch (XBeeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
    };



    public void closeXbeeConnection(){

        xbee.close();

    };

    private class PacketHandler implements PacketListener{

        @Override
        public void processResponse(XBeeResponse response) {
            //if (response instanceof XBeeResponse){
            queue.offer(response);
            //}
        }

    }

}
但是,当我运行它时,
readPacket()
方法将卡在循环的开头,因为队列中存储了XbeerResponse的任何实例。但是,当我将readPacket()方法中的
while
条件从
while((response=queue.poll())!=null)
更改为
while(true)
,它就会工作。这意味着我得到了响应,但我不认为使用
while(true)
是一个好的解决方案,正如我在一些页面上看到的那样。因此,我更喜欢使用
PacketListener


如果有人有什么想法,为什么我的
PacketListener
不起作用,那就太好了。

好的,我找到了一个解决方案,没那么难。在开始循环之前,我从Xbee获得了一个响应并将其添加到队列中,所以它在开始时并没有中断。和我在while循环结束时做的一样,我添加了另一个响应

这是我的
openConnection
方法:

public void openXbeeConnection(String portNumber){

        try {

            xbee.open(portNumber, 57600);
            xbee.addPacketListener(new PacketHandler());
            response = xbee.getResponse();
            queue.add(response);

        }   catch (XBeeException e) {

          System.out.println("" + portNumber + " - connection problems");

            e.printStackTrace();
        }    

    };
在main方法的while循环中,它如下所示:

while ((response = queue.poll()) != null){

            //LOGGER.info(response.toString());
            int[] payload = xbeeReceiver.readPacket();

            dbHandler.updateDB(payload);

            int[] payloadToSend2 = dbHandler.retrieveDataFromFB();
            xbeeReceiver.sendPacket(payloadToSend2);

            try {
                XBee xbee = xbeeReceiver.getXbee();
                response = xbee.getResponse();
                queue.add(response);
            } catch (XBeeException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
while ((response = queue.poll()) != null){

            //LOGGER.info(response.toString());
            int[] payload = xbeeReceiver.readPacket();

            dbHandler.updateDB(payload);

            int[] payloadToSend2 = dbHandler.retrieveDataFromFB();
            xbeeReceiver.sendPacket(payloadToSend2);

            try {
                XBee xbee = xbeeReceiver.getXbee();
                response = xbee.getResponse();
                queue.add(response);
            } catch (XBeeException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }