读取SerialPort名称时发生Java NullPointerException
我正在尝试获取一个JTextArea,以将COM端口的输出显示为字符串。然而,我用来告诉JTextArea它应该显示什么的代码产生了NullPointerException。我大致知道是什么导致了错误,但我只是在寻找最好的方法来处理这个问题,以防止它发生。文本区域的代码为:读取SerialPort名称时发生Java NullPointerException,java,serial-port,Java,Serial Port,我正在尝试获取一个JTextArea,以将COM端口的输出显示为字符串。然而,我用来告诉JTextArea它应该显示什么的代码产生了NullPointerException。我大致知道是什么导致了错误,但我只是在寻找最好的方法来处理这个问题,以防止它发生。文本区域的代码为: if (Serial.currPortId == null) { listenState.setText("NONE"); } else { listenState.setTe
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");
}
错误发生在事件开始时
if (Serial.currPortId.getName().toString().equals(Serial.PORT_NAMES[0].toString())) {
tab1sheet.setText(serialImport.datafeed); }
我假设另外两个的if语句也不起作用
我还提供了串行端口的代码。详情如下:
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());
}
}
我试图更改代码并嵌套它,但它仍然不起作用。现在是:
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");}
}
查看您的代码:
if (Serial.currPortId == null) { <--if this is true
...
} else {
...
}
if (Serial.currPortId.getName()...))) { <-- this is a null pointer null.getName()
if(Serial.currPortId==null){当我将其粘贴到问题中时,刚刚检查过并且代码的格式不正确,那些if语句没有嵌套。如果它们嵌套了,就不会有空指针。您测试null,然后在下一个ifI中忽略它!必须删除“getName()”从支票上看,只要检查一下现金就足够了。