Tengo este código hecho desde NetBeans y quiero adaptarlo a Eclipse. La verdad no sale igual.
NetBeans:
Código
import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.TooManyListenersException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; /** * * @author Ángel Acaymo M. G. (Meta). */ //##############################JM################################################ /* La clase debe implementar la interfaz SerialPortEventListener porque esta misma clase será la encargada de trabajar con el evento escucha cuando reciba datos el puerto serie. */ //##############################JM################################################ /** * Creates new form EP_JAVA_Frame */ // Variables. // Variables de conexión. //##############################JM################################################ /* Así como declaraste una variable ouuput para obtener el canal de salida también creamos una variable para obtener el canal de entrada. */ //##############################JM################################################ SerialPort serialPort; private static final int TIMEOUT = 2000; // 2 segundos. private static final int DATA_RATE = 115200; // Baudios. public EP_JAVA_Frame() { initComponents(); inicializarConexion(); } public void inicializarConexion() { CommPortIdentifier puertoID = null; while (puertoEnum.hasMoreElements()) { CommPortIdentifier actualPuertoID = (CommPortIdentifier) puertoEnum.nextElement(); if (PUERTO.equals(actualPuertoID.getName())) { puertoID = actualPuertoID; break; } } if (puertoID == null) { mostrarError("No se puede conectar al puerto"); } try { serialPort = (SerialPort) puertoID.open(this.getClass().getName(), TIMEOUT); // Parámatros puerto serie. serialPort.setSerialPortParams(DATA_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_2, SerialPort.PARITY_NONE); output = serialPort.getOutputStream(); mostrarError(e.getMessage()); } //##############################JM################################################ /* Aquií asignamos el canal de entrada del puerto serie a nuestra variable input, con sus debido capturador de error. */ try { input = serialPort.getInputStream(); Logger.getLogger(EP_JAVA_Frame.class.getName()).log(Level.SEVERE, null, ex); } /* Aquí agregamos el evento de escucha del puerto serial a esta misma clase (recordamos que nuestra clase implementa SerialPortEventListener), el método que sobreescibiremos será serialevent. */ try { serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true); Logger.getLogger(EP_JAVA_Frame.class.getName()).log(Level.SEVERE, null, ex); } //##############################JM################################################ } //##############################JM################################################ /* Este evento es el que sobreescribiremos de la interfaz SerialPortEventListener, este es lanzado cuando se produce un evento en el puerto como por ejemplo DATA_AVAILABLE (datos recibidos) */ @Override public void serialEvent(SerialPortEvent spe) { if (spe.getEventType() == SerialPortEvent.DATA_AVAILABLE) { byte[] readBuffer = new byte[20]; try { int numBytes = 0; while (input.available() > 0) { numBytes = input.read(readBuffer); //Hacemos uso de la variable input que //creamos antes, input es nuestro canal de entrada. } jTextArea1.append(new String(readBuffer, 0, numBytes, "us-ascii")); // Convertimos de bytes a String y asignamos al JTEXTAREA. // Leelos últimos datos. jTextArea1.setCaretPosition(jTextArea1.getDocument().getLength()); } } } //##############################JM################################################ try { output.write(datos.getBytes()); mostrarError("ERROR"); } } } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { setTitle("Mini Interfaz Java"); jLabel1.setText("Led 8"); jLabel2.setText("Led 13"); jButton1.setText("ON"); jButton1ActionPerformed(evt); } }); jButton2.setText("OFF"); jButton2ActionPerformed(evt); } }); jButton3.setText("ON"); jButton3ActionPerformed(evt); } }); jButton4.setText("OFF"); jButton4ActionPerformed(evt); } }); jTextArea1.setColumns(20); jTextArea1.setRows(5); jScrollPane1.setViewportView(jTextArea1); jLabel3.setText("Mensajes desde Arduino:"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel2)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGroup(layout.createSequentialGroup() .addComponent(jLabel3) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton1) .addComponent(jButton3)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton2) .addComponent(jButton4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); jLabel1.getAccessibleContext().setAccessibleName("jLabel_Led_8"); jButton1.getAccessibleContext().setAccessibleName("jButton_Led_8_ON"); jButton2.getAccessibleContext().setAccessibleName("jButton_Led_8_OFF"); jButton3.getAccessibleContext().setAccessibleName("jButton_Led_13_ON"); jButton4.getAccessibleContext().setAccessibleName("jButton_Led_13_OFF"); pack(); setLocationRelativeTo(null); }// </editor-fold> enviarDatos(Led_8_ON); // Enciende Led 8. } enviarDatos(Led_8_OFF); // Apaga Led 8. } enviarDatos(Led_13_ON); // Enciende Led 13. } enviarDatos(Led_13_OFF); // Apaga Led 13. } /** * @param args the command line arguments */ /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { break; } } java.util.logging.Logger.getLogger(EP_JAVA_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); java.util.logging.Logger.getLogger(EP_JAVA_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); java.util.logging.Logger.getLogger(EP_JAVA_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); java.util.logging.Logger.getLogger(EP_JAVA_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ public void run() { new EP_JAVA_Frame().setVisible(true); } }); } // Variables declaration - do not modify // End of variables declaration }
Lo he intentado paso por paso, pero no se me da.
Eclipse:
Código
package electronica; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.TooManyListenersException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JButton; import javax.swing.JTextArea; import java.awt.EventQueue; /** * Launch the application. */ // Variables. // Variables de conexión. SerialPort serialPort; private static final int TIMEOUT = 2000; // 2 segundos. private static final int DATA_RATE = 115200; // Baudios. public void run() { try { EP_Java frame = new EP_Java(); frame.setVisible(true); e.printStackTrace(); } } }); } public EP_Java() { setTitle("Encender y apagar un Led - Java y Arduino"); setBounds(100, 100, 450, 300); setContentPane(contentPane); contentPane.setLayout(null); btnOn.setBounds(161, 39, 89, 23); contentPane.add(btnOn); btnOff.setBounds(161, 73, 89, 23); contentPane.add(btnOff); textArea_Recibir_mensajes.setBounds(10, 103, 414, 147); contentPane.add(textArea_Recibir_mensajes); inicializarConexion(); } /** * Create the frame. */ public void inicializarConexion() { CommPortIdentifier puertoID = null; while (puertoEnum.hasMoreElements()) { CommPortIdentifier actualPuertoID = (CommPortIdentifier) puertoEnum.nextElement(); if (PUERTO.equals(actualPuertoID.getName())) { puertoID = actualPuertoID; break; } } if (puertoID == null) { mostrarError("No se puede conectar al puerto"); } try { serialPort = (SerialPort) puertoID.open(this.getClass().getName(), TIMEOUT); // Parámatros puerto serie. serialPort.setSerialPortParams(DATA_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_2, SerialPort.PARITY_NONE); output = serialPort.getOutputStream(); mostrarError(e.getMessage()); } //##############################JM################################################ /* Aquií asignamos el canal de entrada del puerto serie a nuestra variable input, con sus debido capturador de error. */ try { input = serialPort.getInputStream(); Logger.getLogger(EP_Java.class.getName()).log(Level.SEVERE, null, ex); } /* Aquí agregamos el evento de escucha del puerto serial a esta misma clase (recordamos que nuestra clase implementa SerialPortEventListener), el método que sobreescibiremos será serialevent. */ try { serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true); Logger.getLogger(EP_Java.class.getName()).log(Level.SEVERE, null, ex); } //##############################JM################################################ } //##############################JM################################################ /* Este evento es el que sobreescribiremos de la interfaz SerialPortEventListener, este es lanzado cuando se produce un evento en el puerto como por ejemplo DATA_AVAILABLE (datos recibidos) */ public void serialEvent(SerialPortEvent spe) { if (spe.getEventType() == SerialPortEvent.DATA_AVAILABLE) { byte[] readBuffer = new byte[20]; try { int numBytes = 0; while (input.available() > 0) { numBytes = input.read(readBuffer); //Hacemos uso de la variable input que //creamos antes, input es nuestro canal de entrada. } textArea_Recibir_mensajes.append(new String(readBuffer, 0, numBytes, "us-ascii")); // Convertimos de bytes a String y asignamos al JTEXTAREA. // Leelos últimos datos. textArea_Recibir_mensajes.setCaretPosition(textArea_Recibir_mensajes.getDocument().getLength()); } } } //##############################JM################################################ try { output.write(datos.getBytes()); mostrarError("ERROR"); } } } }
¿Alguna idea?
Saludos.