我有一个从嵌入式设备读取串行数据的功能。我的程序显示图片和标题,基本上该设备充当游戏的蜂鸣器。有没有办法检查串口数据让我们说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;
}
答案 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。不过我个人更喜欢第一种方法。