title: Java rxtx code to connect to rfcomm0 is not working
body: <p>I have successfully connected my arduino uno R3 with bluetooth mate module and am able to send data to my laptop running Ubuntu 12.04 via bluetooth. (using serial port protocol). The data is received on rfcomm0.</p>
  
  <p>The following code displays the received data : <code>sudo screen /dev/rfcomm0</code></p>
  
  <p>Now I am facing problems in reading this data in a java program. I have referred the code from <a href="http://playground.arduino.cc/Interfacing/Java" rel="nofollow">http://playground.arduino.cc/Interfacing/Java</a>. This uses the rxtx library to access the serial port. </p>
  
  <p>Here is the code : </p>
  
  <pre><code>import java.io.BufferedReader;
  import java.io.InputStreamReader;
  import java.io.OutputStream;
  import gnu.io.CommPortIdentifier; 
  import gnu.io.SerialPort;
  import gnu.io.SerialPortEvent; 
  import gnu.io.SerialPortEventListener; 
  import java.util.Enumeration;
  
  
  public class SerialTest implements SerialPortEventListener {
      SerialPort serialPort;
      /** The port we're normally going to use. */
      private static final String PORT_NAMES[] = { 
              "/dev/tty.usbserial-A9007UX1", // Mac OS X
              "/dev/ttyUSB0", // Linux
              "COM3", // Windows
  //          "/dev/ttyACM0" // Ubuntu
              "/dev/rfcomm0" // Ubuntu Bluetooth
      };
      /**
      * A BufferedReader which will be fed by a InputStreamReader 
      * converting the bytes into characters 
      * making the displayed results codepage independent
      */
      private BufferedReader input;
      /** The output stream to the port */
      private OutputStream output;
      /** Milliseconds to block while waiting for port open */
      private static final int TIME_OUT = 2000;
      /** Default bits per second for COM port. */
      private static final int DATA_RATE = 9600;
  
      public void initialize() {
          CommPortIdentifier portId = null;
          Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
  
          //First, Find an instance of serial port as set in PORT_NAMES.
          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 {
              // open serial port, and use class name for the appName.
              serialPort = (SerialPort) portId.open(this.getClass().getName(),
                      TIME_OUT);
  
              // set port parameters
              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();
  
              // add event listeners
              serialPort.addEventListener(this);
              serialPort.notifyOnDataAvailable(true);
          } catch (Exception e) {
              System.err.println(e.toString());
          }
      }
  
      /**
       * This should be called when you stop using the port.
       * This will prevent port locking on platforms like Linux.
       */
      public synchronized void close() {
          if (serialPort != null) {
              serialPort.removeEventListener();
              serialPort.close();
          }
      }
  
      /**
       * Handle an event on the serial port. Read the data and print it.
       */
      public synchronized void serialEvent(SerialPortEvent oEvent) {
          if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
              try {
                  String inputLine=input.readLine();
                  System.out.println(inputLine);
              } catch (Exception e) {
                  System.err.println(e.toString());
              }
          }
          // Ignore all the other eventTypes, but you should consider the other ones.
      }
  
      public static void main(String[] args) throws Exception {
          SerialTest main = new SerialTest();
          main.initialize();
          Thread t=new Thread() {
              public void run() {
                  //the following line will keep this app alive for 10 seconds,
                  //waiting for events to occur and responding to them (printing incoming messages to console).
                  try {Thread.sleep(10000);} catch (InterruptedException ie) {}
              }
          };
          System.out.println("Started");
          t.start();
          t.join();
          main.close();
          System.out.println("Stopped");
      }
  }
  </code></pre>
  
  <p>This program compiles seccessfully but when executes displays : <code>"Could not find COM port."</code></p>
  
  <p>Note : This code works perfectly when reading data from usb port /dev/ttyACM0. The problem arises when i try to read data from bluetooth port /dev/rfcomm0. </p>
  
  <p>So basically I need a java program to read from rfcomm0 port. Any help is greatly appreciated.</p>