I'm attempting to get a JTextArea to display the output from a COM Port as a string. However, the code i'm using to tell the JTextArea what it should be displaying is producing NullPointerExceptions. I know what's causing the error roughly but i'm just looking for the best way to deal with the issue to prevent it happening. The code for the text areas is:
if (Serial.currPortId == null) {
listenState.setText("NONE");
} else {
listenState.setText(Serial.currPortId.getName().toString());
}
if (Serial.currPortId.getName().toString().equals(Serial.PORT_NAMES[0].toString())) {
tab1sheet.setText(serialImport.datafeed); }
else {
tab1sheet.setText("N/A");
}
if (Serial.currPortId.getName().toString().equals(Serial.PORT_NAMES[1].toString())) {
tab2sheet.setText(serialImport.datafeed); }
else {
tab2sheet.setText("N/A");
}
if (Serial.currPortId.getName().toString().equals(Serial.PORT_NAMES[2].toString())) {
tab3sheet.setText(serialImport.datafeed); }
else {
tab3sheet.setText("N/A");
}
The errors are occurring at the start of
if (Serial.currPortId.getName().toString().equals(Serial.PORT_NAMES[0].toString())) {
tab1sheet.setText(serialImport.datafeed); }
and I assume the if statements for the other two aren't working either.
I'm also providing the code for the serialports. It is as follows:
public void initialize() {
CommPortIdentifier portId = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;
break;
}
}
}
if (portId == null) {
System.out.println("Could not find COM port.");
return;
}
try {
serialPort = (SerialPort) portId.open(this.getClass().getName(),
TIME_OUT);
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
// open the streams
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
output = serialPort.getOutputStream();
String datafeed = "";
datafeed.concat(input.toString());
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}
I've attempted to change the code and nest it but it's still not working. It's now:
if (Serial.currPortId.getName() != null) {
if (Serial.currPortId.getName().toString().equals(Serial.PORT_NAMES[0].toString())) {
tab1sheet.setText(serialImport.datafeed); }
else if (Serial.currPortId.getName().toString().equals(Serial.PORT_NAMES[1].toString())) {
tab2sheet.setText(serialImport.datafeed); }
else if (Serial.currPortId.getName().toString().equals(Serial.PORT_NAMES[2].toString())) {
tab3sheet.setText(serialImport.datafeed); }
else {tab1sheet.setText("N/A");
tab2sheet.setText("N/A");
tab3sheet.setText("N/A");}
}