Java читает последовательные данные за заданный период времени. - PullRequest
1 голос
/ 08 декабря 2011

У меня есть функция, которая читает последовательные данные со встроенного устройства.Моя программа показывает изображение и название, и в основном устройство действует как зуммер для игры.Есть ли способ проверить наличие последовательных данных, скажем, 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 ]

2 голосов
/ 08 декабря 2011

Вы можете начать чтение данных из 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();
// ... 

Этот код не обрабатывает исключения, поэтому он требует некоторой работы по завершению ...

0 голосов
/ 08 декабря 2011

Да, вы можете. Вы можете использовать отдельный поток таймера, который запускает тайм-аут, который закрывает входной поток (что приведет к тому, что input.readLine () вернется с IOException). Или вы можете использовать java.nio . Однако я лично предпочитаю первый метод.

0 голосов
/ 08 декабря 2011

Бросить буфер. Начните чтение входного потока самостоятельно и в другом потоке считайте 5 секунд. После этого закройте поток (в результате функция чтения вернет -1).

...