javarxtx

Input and output stream using RXTX with button


I'm trying to make a Java interface with the RxTx library to communicate with a serial port. I made my interface using Jigloo (shame on me) because my Java knowledge is very limited.

The thing I'm trying to do now is to send data from Java to my electronic board by pushing a JButton in the Java interface. But here's the problem, I really don't know how to do that. I read that I have to use InputStream and OutputStream but where am I supposed to put that ? Should I create another class or classes ?

Here is the code of my Java UI:

package projetPic;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import javax.swing.BorderFactory;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextPane;

import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import javax.swing.SwingUtilities;

import gnu.io.*;

public class ElectroFrame extends javax.swing.JFrame {
    private JPanel jPanel1;
    private JButton jButton1;
    private JButton jButton6;
    private JButton jButton5;
    private JTextField jTextField1;
    private JButton jButton4;
    private JButton jButton3;
    private JLabel jLabel1;
    private JLabel jLabel2;
    private JLabel jLabel3;
    private JLabel jLabel4;
    private JLabel jLabel5;
    private JComboBox jComboBox1;
    private JLabel jLabel8;
    private JLabel jLabel7;
    private JTextField jTextField3;
    private JLabel jLabel6;
    private JButton jButton7;
    private JTextField jTextField2;
    private JButton jButton2;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ElectroFrame inst = new ElectroFrame();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
            }
        });
    }
    
    public ElectroFrame() {
        super();
        initGUI();
    }
    
    private void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            {
                jPanel1 = new JPanel();
                getContentPane().add(jPanel1, BorderLayout.CENTER);
                GridBagLayout jPanel1Layout = new GridBagLayout();
                jPanel1Layout.rowWeights = new double[] {0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1};
                jPanel1Layout.rowHeights = new int[] {20, 75, 29, 32, 55, 36, -171, 35, 42, 38, 42, 20};
                jPanel1Layout.columnWeights = new double[] {0.0, 0.0, 0.0, 0.1};
                jPanel1Layout.columnWidths = new int[] {123, 150, 152, 7};
                jPanel1.setLayout(jPanel1Layout);
                jPanel1.setBackground(new java.awt.Color(198,226,255));
                jPanel1.setPreferredSize(new java.awt.Dimension(584, 500));
                {
                    jButton1 = new JButton();
                    jPanel1.add(jButton1, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jButton1.setText("Compteur binaire");
                    jButton1.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent evt) {
                            jButton1ActionPerformed(evt);
                        }
                    });
                }
                
                {
                    jButton2 = new JButton();
                    jPanel1.add(jButton2, new GridBagConstraints(3, 4, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jButton2.setText("Compteur Chenillard");
                    jButton2.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent evt) {
                            jButton2ActionPerformed(evt);
                        }
                    });
                }
                {
                    jLabel1 = new JLabel();
                    jPanel1.add(jLabel1, new GridBagConstraints(3, 4, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                }
                {
                    jButton3 = new JButton();
                    jPanel1.add(jButton3, new GridBagConstraints(2, 4, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jButton3.setText("Compteur Johnson");
                    jButton3.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent evt) {
                            jButton3ActionPerformed(evt);
                        }
                    });
                }
                {
                    jButton4 = new JButton();
                    jPanel1.add(jButton4, new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jButton4.setText("Clignoter");
                    jButton4.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent evt) {
                            jButton4ActionPerformed(evt);
                        }
                    });
                }
                {
                    jTextField1 = new JTextField();
                    jPanel1.add(jTextField1, new GridBagConstraints(2, 6, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jTextField1.setPreferredSize(new Dimension(150,40));
                }
                {
                    jButton5 = new JButton();
                    jPanel1.add(jButton5, new GridBagConstraints(0, 6, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jButton5.setText("Calculer le CRC");
                    jButton5.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent evt) {
                            jButton5ActionPerformed(evt);
                        }
                    });
                }
                {
                    jButton6 = new JButton();
                    jPanel1.add(jButton6, new GridBagConstraints(0, 8, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jButton6.setText("Calculer le LRC");
                    jButton6.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent evt) {
                            jButton6ActionPerformed(evt);
                        }
                    });
                }
                {
                    jTextField2 = new JTextField();
                    jPanel1.add(jTextField2, new GridBagConstraints(2, 8, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jTextField2.setPreferredSize(new Dimension(150,40));
                }
                {
                    jButton7 = new JButton();
                    jPanel1.add(jButton7, new GridBagConstraints(0, 10, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jButton7.setText("Afficher");
                    jButton7.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent evt) {
                            jButton7ActionPerformed(evt);
                        }
                    });
                }
                {
                    jLabel2 = new JLabel();
                    jPanel1.add(jLabel2, new GridBagConstraints(1, 1, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jLabel2.setText("Projet 2TI - Electronique - 2012-2013");
                }
                {
                    jLabel3 = new JLabel();
                    jPanel1.add(jLabel3, new GridBagConstraints(1, 3, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jLabel3.setText("LED");
                }
                {
                    jLabel4 = new JLabel();
                    jPanel1.add(jLabel4, new GridBagConstraints(1, 5, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jLabel4.setText("CRC");
                }
                {
                    jLabel5 = new JLabel();
                    jPanel1.add(jLabel5, new GridBagConstraints(1, 7, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jLabel5.setText("LRC");
                }
                {
                    jLabel6 = new JLabel();
                    jPanel1.add(jLabel6, new GridBagConstraints(1, 9, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jLabel6.setText("7 segments");
                }
                {
                    jTextField3 = new JTextField();
                    jPanel1.add(jTextField3, new GridBagConstraints(2, 10, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jTextField3.setPreferredSize(new Dimension(150,40));
                }
                {
                    jLabel7 = new JLabel();
                    jPanel1.add(jLabel7, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                }
                {
                    jLabel8 = new JLabel();
                    jPanel1.add(jLabel8, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jLabel8.setText("Port COM");
                }
                {
                    ComboBoxModel jComboBox1Model = 
                            new DefaultComboBoxModel(
                                    new String[] { "Item One", "Item Two" });
                    jComboBox1 = new JComboBox();
                    jPanel1.add(jComboBox1, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
                    jComboBox1.setModel(jComboBox1Model);
                }
            }
            pack();
            setSize(600, 520);
        } catch (Exception e) {
            //add your error handling code here
            e.printStackTrace();
        }
    }
    

    
    private void jButton1ActionPerformed(ActionEvent evt) {
        System.out.println("jButton1.actionPerformed, event="+evt);
        
    }
    
    private void jButton2ActionPerformed(ActionEvent evt) {
        System.out.println("jButton2.actionPerformed, event="+evt);
        //TODO add your code for jButton2.actionPerformed
    }
    
    private void jButton3ActionPerformed(ActionEvent evt) {
        System.out.println("jButton3.actionPerformed, event="+evt);
        //TODO add your code for jButton3.actionPerformed
    }
    
    private void jButton4ActionPerformed(ActionEvent evt) {
        System.out.println("jButton4.actionPerformed, event="+evt);
        //TODO add your code for jButton4.actionPerformed
    }
    
    private void jButton5ActionPerformed(ActionEvent evt) {
        System.out.println("jButton5.actionPerformed, event="+evt);
        //TODO add your code for jButton5.actionPerformed
    }
    
    private void jButton6ActionPerformed(ActionEvent evt) {
        System.out.println("jButton6.actionPerformed, event="+evt);
        //TODO add your code for jButton6.actionPerformed
    }
    
    private void jButton7ActionPerformed(ActionEvent evt) {
        System.out.println("jButton7.actionPerformed, event="+evt);
        //TODO add your code for jButton7.actionPerformed
    }
}

Solution

  • I think you could take a look to theRXTXsample in the link below in order to figure out how this library works:

    http://rxtx.qbang.org/wiki/index.php/Two_way_communcation_with_the_serial_port

    Don´t worry, is not so difficult. You will need:

    One class to handle serial port connection:TwoWaySerialComm,

    Another one to write into the serial port:SerialWriter,

    Finally (it's not strictly necessary but strongly recommended) another class to make the bridge between the GUI and the serial port writer (in other words, the Controller in MVC model).

    So every time you press the JButton you should call some Controller method and this one should figure out what to do with that.