title: Serial Port Not getting closed. I want to release the COM port
body: <p>Serial Port Not getting closed. I want to release the COM port ...</p>
  
  <p>Below is my code....</p>
  
  <pre><code>import java.io.*;
  import java.util.*;
  import gnu.io.*;
  
  public class ReadCommPort implements SerialPortEventListener {
  
      static CommPortIdentifier   portId;
      static Enumeration            portList;
      InputStream                    inputStream;
      OutputStream                outputStream;
      public SerialPort            serialPort;
      List byteList               = new ArrayList();
      public static Message message   = null;
  
      public void readData() {
          boolean    portFound   = false;
          String    defaultPort = "COM1";
          portList            = CommPortIdentifier.getPortIdentifiers();
  
          while ( portList.hasMoreElements() ) {
              portId = ( CommPortIdentifier )portList.nextElement();
              if ( portId.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
                  if ( portId.getName().equals( defaultPort ) ) {
                      System.out.println( "Found port: " + defaultPort );
                      portFound = true;
                      buildSerialPort();
                  }
              }
          }
          if ( ! portFound ) {
              System.out.println( "port " + defaultPort + " not found." );
          }
      }
  
      public void buildSerialPort() {
          try {
              serialPort  = (SerialPort) portId.open( "ReadCommPort", 1 );
              inputStream = serialPort.getInputStream();
              outputStream = serialPort.getOutputStream();
              serialPort.addEventListener( this );
              serialPort.notifyOnDataAvailable(true);
              serialPort.setSerialPortParams( 2400, SerialPort.DATABITS_7, SerialPort.STOPBITS_1,
  
                      SerialPort.PARITY_NONE );
          }
          catch ( Exception e ) {
              e.printStackTrace();
          }
      }
  
      @SuppressWarnings("unchecked")
      public void serialEvent( SerialPortEvent event ) {
  
          switch ( event.getEventType() ) {
          case SerialPortEvent.BI:
              System.out.println( "BI");
              break;
  
          case SerialPortEvent.OE:
              System.out.println( "OE");
              break;
  
          case SerialPortEvent.FE:
              System.out.println( "FE");
              break;
  
          case SerialPortEvent.PE:
              System.out.println( "PE");
              break;
  
          case SerialPortEvent.CD:
              System.out.println( "CD");
              break;
  
          case SerialPortEvent.CTS:
              System.out.println( "CTS");
              break;
  
          case SerialPortEvent.DSR:
              System.out.println( "DSR");
              break;
  
          case SerialPortEvent.RI:
              System.out.println( "RI");
              break;
  
          case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
              System.out.println( "OUTPUT_BUFFER_EMPTY");
              break;
  
          case SerialPortEvent.DATA_AVAILABLE :
              try {
                  int len = inputStream.available();
                  byte[] readBuffer = new byte[ len ];
                  // processing data code..
                  // close the port
                  // release all resources...
                  serialPort.removeEventListener();
                  try
                  {
                      serialPort.addEventListener( null );
                  }
                  catch (TooManyListenersException e)
                  {
                      e.printStackTrace();
                  }
                  inputStream.close();
                  outputStream.close();
                  serialPort.close();
              }
              catch ( IOException e )
              {
                  e.printStackTrace();
              }
              break;
          }
      }
  
      public static void main(String[] args) {
          new ReadCommPort().readData();
      }
  }
  </code></pre>