Что делать, если Java-программа должна непрерывно получать данные от последовательной связи, но теперь испытывает задержку или задержку в программе?

#java #timer #arduino #serial-port #serial-communication

#java #таймер #arduino #последовательный порт #последовательная связь

Вопрос:

Я использую Arduino, подключенный к Java Netbeans через Serialcomm. Моя java-программа должна непрерывно получать данные, а последовательный порт должен быть постоянно открыт. И теперь я испытываю задержку или запаздывание в программе. Я думаю, что это может быть из-за таймера, поэтому я попытался удалить его. Но последовательный порт больше не открывается, когда я это делаю.

Что я должен сделать, чтобы устранить задержку или замедление работы программы? Может быть, есть другой способ сделать это, например, изменить мой прослушиватель действий или другой способ, чтобы он непрерывно считывал последовательный порт без использования таймера.

Заранее спасибо за ответ!

 Timer timer ;   
ActionListener readRF = new ActionListener() {
    @Override
         public void actionPerformed(ActionEvent e) {
                String str;
 SerialPort serialPort = new SerialPort("COM3");
//In the constructor pass the name of the port with which we work

try {
    //Open port
    serialPort.openPort();

    
    serialPort.setParams(SerialPort.BAUDRATE_9600,
            SerialPort.DATABITS_8,
            SerialPort.STOPBITS_1,
            SerialPort.PARITY_NONE);



    Thread.sleep(1000);//Very important !!!



    //Read data from port
    for (int i = 0; i < 30; i  ) {
        str = serialPort.readString();
        

        if (str != null) {
                System.out.println(str);
            if(str.contains("15538849")){
            queue1.setText(String.valueOf(q.Table1Peek()));
            }else if(str.contains("15538850")){
            q.Table1DeQueue();    
            queue1.setText(String.valueOf(q.Table1Peek()));
            }
        }

        Thread.sleep(100);
    }

    //Closing the port
    serialPort.closePort();

} catch (SerialPortException ex ) {
    System.out.println(ex);
} catch (InterruptedException ex) {
    System.out.println(ex);
}
        }

};
                timer = new Timer(1000,readRF);
                timer.setInitialDelay(0);
                timer.start();