有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个从嵌入式设备读取串行数据的功能。我的程序显示一张图片和一个标题,基本上这个设备就像一个游戏的蜂鸣器。有没有办法检查串行数据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;
    }

共 (2) 个答案

  1. # 1 楼答案

    您可以开始从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();
    // ... 
    

    这段代码没有越位处理,所以需要一些定稿工作

  2. # 2 楼答案

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