Java Serial Com收到不是我编写的任何代码的错误

问题描述

我正在编写的这个用于监视串行设备输出小程序遇到问题。我正在使用jSerialComm库,但出现错误(不会使程序崩溃,它会继续运行)。错误如下(我不确定它是否与串行相关,因为我看到摆动很多,但是错误每隔5秒钟左右触发一次(每次我从设备接收到新的数据字符串时):

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.desktop/javax.swing.plaf.synth.SynthLookAndFeel.paintRegion(SynthLookAndFeel.java:376)
    at java.desktop/javax.swing.plaf.synth.SynthLookAndFeel.update(SynthLookAndFeel.java:340)
    at java.desktop/javax.swing.plaf.synth.SynthTextFieldUI.update(SynthTextFieldUI.java:179)
    at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:797)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5255)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedFPScales(RepaintManager.java:1707)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1616)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
    at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
    at java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5203)
    at java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5013)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:865)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventdispatchThread.pumpOneEventForFilters(EventdispatchThread.java:203)
    at java.desktop/java.awt.EventdispatchThread.pumpEventsForFilter(EventdispatchThread.java:124)
    at java.desktop/java.awt.EventdispatchThread.pumpEventsForHierarchy(EventdispatchThread.java:113)
    at java.desktop/java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:109)
    at java.desktop/java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:101)
    at java.desktop/java.awt.EventdispatchThread.run(EventdispatchThread.java:90)

现在,所有这些链接代码行都不在我编写的代码中,所以我不确定如何调试它们。

这是我的代码

private void btn_refreshActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // Re Query the COM ports to see available ports.
        updateStatus("Port List Updated");
        comPortList = SerialPort.getCommPorts();
        dropDownPorts.removeAllItems();
        for (SerialPort value: comPortList) {
            dropDownPorts.addItem(value.getSystemPortName());
        }
    
public void connectPort(int index) {
            System.out.println("Attempting to connect to Index:" + index);
            int baudrate = 115200;
                    
            SerialPort comPort = comPortList[index];
            currentConnectedPort = comPort;
            comPort.openPort();
            comPort.setParity(SerialPort.NO_PARITY);
            comPort.setNumStopBits(SerialPort.ONE_STOP_BIT);
            comPort.setNumDataBits(8);
            comPort.addDataListener(this);
            comPort.setBaudrate(baudrate);
                    
            System.out.println("Connection successful!");
            updateStatus("Connected!");
        }
        
         @Override
        public int getListeningEvents() {
            return SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
        }
    
        @Override
        public void serialEvent(com.fazecast.jSerialComm.SerialPortEvent event) {
            System.out.println("Serial Event triggered!");
            if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE) {
                System.out.println("Event type is not LISTENING EVENT");
                return;
            }
    
            int bytesAvailable = currentConnectedPort.bytesAvailable();
            if (bytesAvailable <= 0) {
                System.out.println("Bytes available <= 0");
                return;
            }
    
            int bytesRead = currentConnectedPort.readBytes(buffer,Math.min(buffer.length,bytesAvailable));
            String response = new String(buffer,bytesRead);
            System.out.println("Response received is");
            System.out.println(response);
            parseData(response);
        }

由于我看到太多的挥杆标注,我认为这可能是我的UI?

这是我的GUI代码

 public void updateGUI() {
        // triggered by parser
        streamRx += newLine;
        txt_rawOutput.setText(streamRx);
        
        if (values.length > 52) {
            System.out.println("received values string");
            txt_coilIn.setText(values[8]);
            txt_coilOut.setText(values[9]);
            txt_coilCtrl.setText(values[6]);
            txt_compressorCtrl.setText(values[11]);
            txt_compressorActual.setText(values[12]);
            txt_fan1Pwr.setText(values[2]);
            txt_fan2Pwr.setText(values[4]);
            txt_freezerTemp.setText(values[22]);
            txt_fridgeTemp.setText(values[31]);
            txt_targetTemp.setText(values[20]);
            txt_timeStamp.setText(values[0]);
            txt_ambientTemp.setText(values[72]);
            txt_heater1Pwr.setText(values[46]);
            txt_heater2Pwr.setText(values[50]);
            txt_freezerPan.setText(values[48]);
            txt_fridgePan.setText(values[52]);
            txt_coilIn.updateUI(); 
            txt_coilOut.updateUI();
            txt_coilCtrl.updateUI();
            txt_compressorCtrl.updateUI();
            txt_compressorActual.updateUI();
            txt_fan1Pwr.updateUI();
            txt_fan2Pwr.updateUI();
            txt_freezerTemp.updateUI();
            txt_fridgeTemp.updateUI();
            txt_targetTemp.updateUI();
            txt_timeStamp.updateUI();
            txt_ambientTemp.updateUI();
            txt_heater1Pwr.updateUI();
            txt_heater2Pwr.updateUI();
            txt_freezerPan.updateUI();
            txt_fridgePan.updateUI();
        }
                
        //UPDATE UI
        txt_rawOutput.updateUI(); 
        txt_rawOutput.setCaretPosition(txt_rawOutput.getDocument().getLength() - 1);
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)