问题描述:

I am making application of serial communication on ARM processor for SerialPort(/dev/ttyS0).

My Processor is armv7l(512 RAM, Linux OS(debian.imag) ). I got some error which I can't understand or why it occurred some time(not every time)? My code and error are below. So if you have any idea or suggestion then please tell me.

//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);

}

}

Error:

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)

网友答案:
 public OutputStream out = null;

Is never initialized. You're having a NullPointerException.

相关阅读:
Top