读取SerialPort名称时发生Java NullPointerException

读取SerialPort名称时发生Java NullPointerException,java,serial-port,Java,Serial Port,我正在尝试获取一个JTextArea,以将COM端口的输出显示为字符串。然而,我用来告诉JTextArea它应该显示什么的代码产生了NullPointerException。我大致知道是什么导致了错误,但我只是在寻找最好的方法来处理这个问题,以防止它发生。文本区域的代码为: if (Serial.currPortId == null) { listenState.setText("NONE"); } else { listenState.setTe

我正在尝试获取一个JTextArea,以将COM端口的输出显示为字符串。然而,我用来告诉JTextArea它应该显示什么的代码产生了NullPointerException。我大致知道是什么导致了错误,但我只是在寻找最好的方法来处理这个问题,以防止它发生。文本区域的代码为:

    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()”从支票上看,只要检查一下现金就足够了。