Java读取给定时间段的串行数据。

时间:2011-12-08 11:51:40

标签: java embedded serial-port bufferedreader

我有一个从嵌入式设备读取串行数据的功能。我的程序显示图片和标题,基本上该设备充当游戏的蜂鸣器。有没有办法检查串口数据让我们说5秒,如果没有收到任何东西继续代码(转到下一张图片和标题)。我目前的功能看起来像这样。

    public String getUARTLine(){
        String inputLine = null;

        try{
            BufferedReader input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
            inputLine = input.readLine();
            if (inputLine.length() == 0)
                return null;
            } catch (IOException e){
                //System.out.println("IOException: " + e);
                return null;
            }
        return inputLine;
    }

3 个答案:

答案 0 :(得分:2)

您可以从serialPort开始读取数据并在其他线程中启动计时器。像这样:

class ReadItWithTimeLimit implements Runnable {
   int miliSeconds;
   BufferedReader reader;
   public ReadItWithTimeLimit (BufferedReader reader, int miliSeconds) {
       this.miliSeconds = miliSeconds;
       this.reader = reader;
   }

   public void run() {
       Thread.sleep(miliSeconds);
       this.reader.close();
   }
}

所以你可以从你的代码中调用它:

// ... 
BufferedReader input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
new Thread(new ReadItWithTimeLimit(input, 5000)).start();
inputLine = input.readLine();
// ... 

此代码没有兴奋处理,因此需要进行一些完成工作......

答案 1 :(得分:0)

放下缓冲区。自己开始读取输入流,并在不同的线程计数5秒内开始读取。之后,关闭流(这将导致read函数返回-1)。

答案 2 :(得分:0)

是的,你可以。您可以使用单独的计时器线程来触发关闭输入流的超时(这将导致input.readLine()返回IOException)。或者您可以使用java.nio。不过我个人更喜欢第一种方法。