从串口读取会停止键盘和鼠标响应

时间:2013-05-21 09:21:04

标签: java macos rxtx

我编写了Java代码,用USB读取从Arduino发送到Mac的传感器数据。我正在使用RXTX库版本2.1.7。

代码是:

    CommPortIdentifier portId = getPortId();
    logger.info(PORT_NAME + " has ID " + portId);

    try
    {
        serialPort = (SerialPort) portId.open(this.getClass().getName(), TIME_OUT);

        // set port parameters
        serialPort.setSerialPortParams(DATA_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

        input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));

        // add event listeners
        serialPort.addEventListener(this);
        serialPort.notifyOnDataAvailable(true);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
        logger.error(ex.toString());
    }

然后我有一个方法来响应串口上的事件:

public void serialEvent(SerialPortEvent e) {

    String url = LOCALHOST;

    if (e.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
        try {

            String inputLine=input.readLine();
            logger.info("Read: " + inputLine);

            String[] tokens = inputLine.split(",");
            String tmp = tokens[0];
            String lgt = tokens[1];
            String vib = tokens[2];
            String mot = tokens[3];

            logger.info("Temperature: " + tmp);
            logger.info("Light: " + lgt);
            logger.info("Vibration: " + vib);
            logger.info("Motion: " + mot);

            logger.info("Sending update to " + url);
            sendUpdate(url, tmp, lgt, vib, mot);
        } catch (Exception ex) {
            logger.error(ex.toString());
        }
    }
}

理想情况下,该程序无限期地从串行端口抓取传感器观测值。但是,我在一个晚上启动程序,当我第二天早上回来时,我的Mac的蓝牙键盘和鼠标不再响应。这肯定是导致问题的代码。这是Mac OS中的安全问题吗?是否最好在一段时间后关闭并重新打开端口以阻止这种情况发生?

0 个答案:

没有答案