0

我正在 ARM 处理器上为 SerialPort(/dev/ttyS0) 应用串行通信。我的处理器是 armv7l(512 RAM, Linux OS(debian.imag) )。我遇到了一些我无法理解的错误,或者为什么它有时会发生(不是每次都发生)?我的代码和错误如下。因此,如果您有任何想法或建议,请告诉我。

//Imports were here...

public class SerialCommandApp extends JPanel {

    public static javax.swing.JTextField inpuText;
    private javax.swing.JLabel inputLbl;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel outPutLbl;
    public static javax.swing.JTextArea outPuttextArea;
    private javax.swing.JLabel tempLbl;
    public static javax.swing.JLabel tempShowLbl;
    public static javax.swing.JTextArea temptextArea;
    public static boolean inputFlag = false;
    public OutputStream out = null;
    String command = "t0?\n";
    int count=1;
    public Timer tmr = new Timer(1000, new ActionListener() {

        public void actionPerformed(ActionEvent evt) {

            if (count == 0) {
                sendCommand();
            }
            count--;
        }
    });

    public void sendCommand() {

        final Thread SendThread = new Thread() {

            @Override
            public void run() {
                count = 1;
                try {
                    out.write(command.getBytes());
                    out.flush();
                } catch (IOException ex) {
                    Logger.getLogger(SerialCommandApp.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        };
        SendThread.setDaemon(true);
        SendThread.start();
    }
    public LaserCommandApp() {
        setComponents();
        connect("/dev/ttyS0");
        tmr.start();
    }
    private void setComponents() {
        tempLbl = new javax.swing.JLabel("Temperature :");
        tempShowLbl = new javax.swing.JLabel("Label");
        inputLbl = new javax.swing.JLabel("InPut :");
        inpuText = new javax.swing.JTextField();
        outPutLbl = new javax.swing.JLabel("OutPut :");
        jScrollPane1 = new javax.swing.JScrollPane();
        outPuttextArea = new javax.swing.JTextArea();
        jScrollPane2 = new javax.swing.JScrollPane();
        temptextArea = new javax.swing.JTextArea(40000, 10);
        this.setBackground(new java.awt.Color(204, 255, 255));
        tempLbl.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        tempShowLbl.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N        
        inputLbl.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        inpuText.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        inpuText.setText(""); // NOI18N
        inpuText.addKeyListener(new java.awt.event.KeyAdapter() {
            @Override
            public void keyTyped(java.awt.event.KeyEvent evt) {
                inpuTextKeyTyped(evt);
            }
        });
        outPutLbl.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        outPuttextArea.setColumns(20);
        outPuttextArea.setRows(5);
        jScrollPane1.setViewportView(outPuttextArea);
        temptextArea.setColumns(20);
        temptextArea.setRows(10);
        jScrollPane2.setViewportView(temptextArea);
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(this);
        this.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel1Layout.createSequentialGroup().addContainerGap().addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel1Layout.createSequentialGroup().addComponent(inputLbl).addContainerGap(482, Short.MAX_VALUE)).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(outPutLbl).addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 253, javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 102, Short.MAX_VALUE).addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(jPanel1Layout.createSequentialGroup().addComponent(inpuText, javax.swing.GroupLayout.PREFERRED_SIZE, 156, javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 122, Short.MAX_VALUE).addComponent(tempLbl).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(tempShowLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE))).addGap(36, 36, 36)))));
        jPanel1Layout.setVerticalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel1Layout.createSequentialGroup().addContainerGap().addComponent(inputLbl).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(inpuText, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(tempLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(tempShowLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel1Layout.createSequentialGroup().addGap(43, 43, 43).addComponent(outPutLbl).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 154, Short.MAX_VALUE)).addGroup(jPanel1Layout.createSequentialGroup().addGap(3, 3, 3).addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE))).addContainerGap()));

    }
        private void inpuTextKeyTyped(java.awt.event.KeyEvent evt) {
        if (evt.getKeyChar() == KeyEvent.VK_ENTER) {
            try {
                inputFlag = true;
                String str = inpuText.getText() + "\n";
                out.write(str.getBytes());
                out.flush();
            } catch (IOException ex) {
                System.out.println("Errore at enter press button");
            }
        }
    }
    public final void connect(String portName) {
        try {
            CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
            if (portIdentifier.isCurrentlyOwned()) {
                System.out.println("Error: Port is currently in use");
            } else {
                CommPort commPort = portIdentifier.open(this.getClass().getName(), 2000);
                if (commPort instanceof SerialPort) {
                    SerialPort serialPort = (SerialPort) commPort;
                    serialPort.setSerialPortParams(115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
                    serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
                    InputStream in = serialPort.getInputStream();
                    out = serialPort.getOutputStream();
                    Thread inputThread = (new Thread(new SerialReader(in)));
                    inputThread.setDaemon(true);
                    inputThread.start();
                } else {
                    System.out.println("Error: Only serial ports are handled by this example.");
                }
            }
        } catch (NoSuchPortException npx) {
            System.out.println("No Such Port is Available");
        } catch (Exception ex) {
            System.out.println("Error occure at connecting to port");
        }
    }
    public static class SerialReader implements Runnable {
        String str = "";
        String fullString = "";
        InputStream in = null;
        public SerialReader(InputStream in1) {
            this.in = in1;
        }

        @Override
        public void run() {
            byte[] buffer = new byte[1024];
            int len = -1;
            try {
                while ((len = this.in.read(buffer)) > -1) {
                    str = new String(buffer, 0, len);
                     fullString = fullString + str;

                    if (fullString.endsWith("\n")) {

                        if (SerialCommandApp.inputFlag) {
                            SerialCommandApp.inputFlag = false;
                            SerialCommandApp.outPuttextArea.append(fullString);
                            //SerialCommandApp.outPuttextArea.append("\n");
                        } else {
                            SerialCommandApp.temptextArea.append(fullString);
                           // SerialCommandApp.temptextArea.append("\n");
                            SerialCommandApp.tempShowLbl.setText(fullString);
                        }
                        fullString = "";
                    } 

                }
            } catch (IOException ex) {
                System.out.println("Errore at reading data");
            }
        }
    }

    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        jFrame.add(new LaserCommandApp());
        jFrame.setSize(500, 400);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);
    }
}

错误:

enter code here
Exception in thread "TimerQueue" Exception in thread "AWT-EventQueue-0" java.lang.IllegalMonitorStateException
    at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:155)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1260)
    at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:460)
    at sun.awt.SunToolkit.awtUnlock(SunToolkit.java:245)
    at sun.java2d.x11.X11Renderer.fillRect(X11Renderer.java:214)
    at sun.java2d.pipe.ValidatePipe.fillRect(ValidatePipe.java:76)
    at sun.java2d.SunGraphics2D.fillRect(SunGraphics2D.java:2321)
    at javax.swing.plaf.basic.BasicTextUI.paintBackground(BasicTextUI.java:658)
    at javax.swing.plaf.basic.BasicTextUI.paintSafely(BasicTextUI.java:728)
    at javax.swing.plaf.basic.BasicTextUI.paint(BasicTextUI.java:883)
    at javax.swing.plaf.basic.BasicTextUI.update(BasicTextUI.java:862)
    at javax.swing.JComponent.paintComponent(JComponent.java:769)
    at javax.swing.JComponent.paint(JComponent.java:1045)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5212)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1236)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5160)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4971)
    at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
    at javax.swing.RepaintManager$3.run(RepaintManager.java:784)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:784)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:757)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:706)
    at javax.swing.RepaintManager.access$1000(RepaintManager.java:62)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1651)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
    at java.awt.EventQueue.access$200(EventQueue.java:100)
    at java.awt.EventQueue$3.run(EventQueue.java:682)
    at java.awt.EventQueue$3.run(EventQueue.java:680)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
java.lang.NullPointerException: 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.compareAndSetState(AbstractQueuedSynchronizer.java:566)
    at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:211)
    at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290)
    at javax.swing.TimerQueue.addTimer(TimerQueue.java:135)
    at javax.swing.TimerQueue.run(TimerQueue.java:187)
    at java.lang.Thread.run(Thread.java:722)
Exception in thread "AWT-XAWT" java.lang.NullPointerException: 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.compareAndSetState(AbstractQueuedSynchronizer.java:566)
    at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:211)
    at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290)
    at sun.awt.SunToolkit.awtLock(SunToolkit.java:237)
    at sun.awt.X11.XBaseWindow.ungrabInput(XBaseWindow.java:883)
    at sun.awt.X11.XToolkit.run(XToolkit.java:675)
    at sun.awt.X11.XToolkit.run(XToolkit.java:591)
    at java.lang.Thread.run(Thread.java:722)
4

1 回答 1

1
 public OutputStream out = null;

从不初始化。你有一个 NullPointerException。

于 2013-04-26T13:34:14.343 回答