title: Sending a string to a COM port
body: <p>First project, its only out of interest so i can learn.</p>
  
  <p>I am trying to make an app that will send a string down a comm port. Below is my GUI (first attempt!)</p>
  
  <p>I have created buttons and they do things but now i need to add the com port functionality.</p>
  
  <p>Please can someone give me a pointer?  In the most simple language possible please. I am self taught.</p>
  
  <pre><code>import java.awt.GridLayout;
  import java.io.*;
  import javax.swing.*;
  
  import java.util.*;
  
  
  
  public class AlarmGenerator extends javax.swing.JFrame {
  
  public AlarmGenerator() {
      initComponents();
  }
  
  
  private void initComponents() {
  
      jTextField1 = new javax.swing.JTextField();
      jTextField2 = new javax.swing.JTextField();
      jButton1 = new javax.swing.JButton();
      jButton2 = new javax.swing.JButton();
      jButton3 = new javax.swing.JButton();
      jButton4 = new javax.swing.JButton();
  
  
      setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  
      jTextField1.setText("Enter Custom String Here");
      jTextField2.setText("Result");
      jButton1.setText("Alarm1");
      jButton2.setText("Alarm2");
      jButton3.setText("Alarm3");
      jButton4.setText("Custom Alarm");
  
      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
      getContentPane().setLayout(layout);
      layout.setHorizontalGroup(
          layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(layout.createSequentialGroup()               
  
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)    
                      .addComponent(jButton1)
                      .addComponent(jButton2)
                      .addComponent(jButton3)
                      .addComponent(jButton4)
                      .addComponent(jTextField1)
                      .addComponent(jTextField2)
  
      )));
      layout.setVerticalGroup(
          layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(layout.createSequentialGroup()
  
              .addComponent(jButton1)
              .addComponent(jButton2)
              .addComponent(jButton3)
              .addComponent(jButton4)
              .addComponent(jTextField1)
              .addComponent(jTextField2)
  
              .addContainerGap(0, Short.MAX_VALUE))
      );
  
      pack();
  
      jButton1.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
              jButton1ActionPerformed(evt);
          }
  
          private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
              jTextField2.setText("Alarm 1 Activated, String: "+alarm1);
          }
      });
  
      jButton2.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
              jButton2ActionPerformed(evt);
          }
  
          private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
              jTextField2.setText("Alarm 2 Activated, String: "+alarm2);
          }
      });
  
      jButton3.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
              jButton3ActionPerformed(evt);
          }
  
          private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
              jTextField2.setText("Alarm 3 Activated, String: "+alarm3);
          }
      });
  
      jButton4.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
              jButton4ActionPerformed(evt);
          }
  
          private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
              jTextField2.setText("Custom alarm, string sent: "+jTextField1.getText ());
          }
      });
  }                       
  
  public static void main(String args[]) {        
  
      java.awt.EventQueue.invokeLater(new Runnable() {
          public void run() {
              new AlarmGenerator().setVisible(true);
  
  
          }
      });
  
  
  }
  
  // Variables declaration                    
  private static javax.swing.JButton jButton1;
  private javax.swing.JButton jButton2;
  private javax.swing.JButton jButton3;
  private javax.swing.JButton jButton4;
  private javax.swing.JTextField jTextField1;
  private javax.swing.JTextField jTextField2;
  String alarm1 = "Hello";
  String alarm2 = "Bye";
  String alarm3 = "Custom";
  // End of variables declaration                   
  }
  </code></pre>
  
  <p>Class 2 </p>
  
  <pre><code>import gnu.io.CommPort;
  import gnu.io.CommPortIdentifier;
  import gnu.io.SerialPort;
  
  import java.io.FileDescriptor;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  
  public class TwoWaySerialComm {
  public TwoWaySerialComm() {
      super();
  }
  
  void connect(String portName) throws Exception {
      CommPortIdentifier portIdentifier = CommPortIdentifier
              .getPortIdentifier(portName);
      if (portIdentifier.isCurrentlyOwned()) {
          System.out.println("Error: Port is currently in use");
      } else {
          CommPort commPort = portIdentifier.open(this.getClass().getName(),
                  2000);
  
          if (commPort instanceof SerialPort) {
              SerialPort serialPort = (SerialPort) commPort;
              serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
                      SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
  
              InputStream in = serialPort.getInputStream();
              OutputStream out = serialPort.getOutputStream();
  
              (new Thread(new SerialReader(in))).start();
              (new Thread(new SerialWriter(out))).start();
  
          } else {
              System.out
                      .println("Error: Only serial ports are handled by this example.");
          }
      }
  }
  
  /** */
  public static class SerialReader implements Runnable {
      InputStream in;
  
      public SerialReader(InputStream in) {
          this.in = in;
      }
  
      public void run() {
          byte[] buffer = new byte[1024];
          int len = -1;
          try {
              while ((len = this.in.read(buffer)) &gt; -1) {
                  System.out.print(new String(buffer, 0, len));
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
  
  /** */
  public static class SerialWriter implements Runnable {
      OutputStream out;
  
      public SerialWriter(OutputStream out) {
          this.out = out;
      }
  
      public void run() {
          try {
              int c = 0;
              while ((c = System.in.read()) &gt; -1) {
                  this.out.write(c);
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
  
  public static void main(String[] args) {
      try {
          (new TwoWaySerialComm()).connect("COM3");
      } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
  }
  }
  </code></pre>