Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java读取给定时间段的串行数据。_Java_Embedded_Serial Port_Bufferedreader - Fatal编程技术网

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

Java读取给定时间段的串行数据。,java,embedded,serial-port,bufferedreader,Java,Embedded,Serial Port,Bufferedreader,我有一个从嵌入式设备读取串行数据的功能。我的程序显示一张图片和一个标题,基本上这个设备就像一个游戏的蜂鸣器。是否有办法检查串行数据5秒钟,如果没有收到任何数据,则继续代码(转到下一张图片和标题)。我当前的函数如下所示 public String getUARTLine(){ String inputLine = null; try{ BufferedReader input = new BufferedReader(new Inp

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

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

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

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

此代码没有excaption处理,因此需要一些最终工作…

此代码只读取数据一次,不允许您在5秒钟内读取数据。