Filtro CPL Polarizado ventajas

JavaMail en JAVA (Enviando correos desde programa hecho en JAVA) - Ejemplo

Bienvenido!

Hola a todos!

Mi nombre es Ivan Luis Jimenez y hoy les vengo compartiendo un blog en el cual les mostraré un pequeño programa hecho en JAVA, el cual fue hecho con ayuda de la API JavaMail. Esta API nos permite trabajar con el Correo Electrónico, es recomendable trabajarla con el servidor SMTP de Gmail, ya que ofrece mas posibilidades para trabajar.

Al final les dejo el link del .jar de la librería y el proyecto completo.

Uno de los problemas que tienen muchos es que les marca error al momento de enviar el correo, pero aquí les presentaré soluciones:

1. Cuando les presente un error similar a Connection Refused, esto indica que no se puede conectar al servidor se Gmail, puede suceder por varios factores, el puerto al cual lo están direccionando no es el correcto, el puerto debe ser 587. Este error también puede pasar porque en la red en la que estas no permite salida y entrada de datos por ese puerto al cual estas enviando, esto me paso en mi escuela, ya que tienen la mayor parte de puertos cerrados.

2. El otro error y creo que es el mas común, es que Google Mail, les impide trabajar con  la aplicación, y por seguridad bloquea el acceso a tu cuenta desde un programa que no sea manejado desde él, por tanto tienen que ir a configuración de su cuenta de correo y permitirle acceder o que trabaje con otras aplicaciones.

Les dejo unas capturas de la configuración:



Con la configuración del programa que les compartiré y la anterior, no tendrán problemas al trabajar con él.

Les muestro la interfaz del programa (capturas de pantalla):





Y comprobamos que llego a nuestro destino:


  Como podemos ver esto es sencillo y funciona correctamente.

Bueno al grano!

Les presentaré el código del programa:
El programa se compone de dos clases y dos JFrames, la principal en donde se encuentra el JFrame y otro JFrame muy sencillo sólo para mostrar el mensaje de que si se envió correctamente o no:

Clase Email_JAVA (en esta clase esta el JFrame)


import com.sun.awt.AWTUtilities;

/**
 *
 * @author Ivan Luis Jimenez
 */
public class Email_JAVA extends javax.swing.JFrame {

    proceso_email mail = new proceso_email();
    
    public Email_JAVA() {
        initComponents();
        setSize(554, 400);
        setLocationRelativeTo(this);
        AWTUtilities.setWindowOpaque(this, false);
    }

    @SuppressWarnings("unchecked")
    //                           
    private void initComponents() {

        Enviar = new javax.swing.JButton();
        para = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        asunto = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        contenido = new javax.swing.JScrollPane();
        mensaje = new javax.swing.JTextArea();
        jLabel6 = new javax.swing.JLabel();
        pass = new javax.swing.JPasswordField();
        jLabel5 = new javax.swing.JLabel();
        de = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        Cancelar = new javax.swing.JButton();
        Limpiar = new javax.swing.JButton();
        minimizar = new javax.swing.JButton();
        titulo = new javax.swing.JLabel();
        salir = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setUndecorated(true);
        getContentPane().setLayout(null);

        Enviar.setBackground(new java.awt.Color(255, 255, 255));
        Enviar.setForeground(new java.awt.Color(255, 255, 255));
        Enviar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/enviar.png"))); // NOI18N
        Enviar.setBorder(null);
        Enviar.setBorderPainted(false);
        Enviar.setContentAreaFilled(false);
        Enviar.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        Enviar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        Enviar.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/enviar2.png"))); // NOI18N
        Enviar.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/enviar1.png"))); // NOI18N
        Enviar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                EnviarActionPerformed(evt);
            }
        });
        getContentPane().add(Enviar);
        Enviar.setBounds(20, 280, 110, 40);

        para.setBackground(new java.awt.Color(255, 255, 102));
        para.setToolTipText("Destinatario");
        para.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                paraActionPerformed(evt);
            }
        });
        getContentPane().add(para);
        para.setBounds(60, 100, 470, 24);

        jLabel7.setBackground(new java.awt.Color(0, 0, 0));
        jLabel7.setForeground(new java.awt.Color(0, 0, 0));
        jLabel7.setText("Mensaje:");
        getContentPane().add(jLabel7);
        jLabel7.setBounds(20, 160, 80, 16);

        asunto.setBackground(new java.awt.Color(255, 255, 102));
        asunto.setToolTipText("Asunto del mensaje");
        asunto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                asuntoActionPerformed(evt);
            }
        });
        getContentPane().add(asunto);
        asunto.setBounds(80, 130, 450, 24);

        jLabel8.setBackground(new java.awt.Color(0, 0, 0));
        jLabel8.setForeground(new java.awt.Color(0, 0, 0));
        jLabel8.setText("Asunto:");
        getContentPane().add(jLabel8);
        jLabel8.setBounds(20, 130, 50, 16);

        mensaje.setBackground(new java.awt.Color(255, 255, 102));
        mensaje.setColumns(20);
        mensaje.setLineWrap(true);
        mensaje.setRows(5);
        mensaje.setToolTipText("Contenido");
        mensaje.setWrapStyleWord(true);
        contenido.setViewportView(mensaje);

        getContentPane().add(contenido);
        contenido.setBounds(20, 180, 510, 100);

        jLabel6.setBackground(new java.awt.Color(0, 0, 0));
        jLabel6.setForeground(new java.awt.Color(0, 0, 0));
        jLabel6.setText("Para:");
        getContentPane().add(jLabel6);
        jLabel6.setBounds(20, 100, 40, 16);

        pass.setBackground(new java.awt.Color(255, 255, 102));
        pass.setForeground(new java.awt.Color(255, 0, 0));
        pass.setToolTipText("Contraseña de quién envia el mensaje");
        getContentPane().add(pass);
        pass.setBounds(360, 60, 170, 22);

        jLabel5.setBackground(new java.awt.Color(0, 0, 0));
        jLabel5.setForeground(new java.awt.Color(0, 0, 0));
        jLabel5.setText("Contraseña:");
        getContentPane().add(jLabel5);
        jLabel5.setBounds(270, 60, 80, 16);

        de.setBackground(new java.awt.Color(255, 255, 102));
        de.setForeground(new java.awt.Color(255, 0, 0));
        de.setToolTipText("Quién envia el mensaje");
        getContentPane().add(de);
        de.setBounds(50, 60, 200, 24);

        jLabel4.setBackground(new java.awt.Color(0, 0, 0));
        jLabel4.setForeground(new java.awt.Color(0, 0, 0));
        jLabel4.setText("De:");
        getContentPane().add(jLabel4);
        jLabel4.setBounds(20, 60, 40, 16);

        Cancelar.setBackground(new java.awt.Color(255, 255, 255));
        Cancelar.setForeground(new java.awt.Color(255, 255, 255));
        Cancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/cancelar.png"))); // NOI18N
        Cancelar.setBorder(null);
        Cancelar.setBorderPainted(false);
        Cancelar.setContentAreaFilled(false);
        Cancelar.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        Cancelar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        Cancelar.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/cancelar2.png"))); // NOI18N
        Cancelar.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/cancelar1.png"))); // NOI18N
        Cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CancelarActionPerformed(evt);
            }
        });
        getContentPane().add(Cancelar);
        Cancelar.setBounds(150, 280, 110, 40);

        Limpiar.setBackground(new java.awt.Color(255, 255, 255));
        Limpiar.setForeground(new java.awt.Color(255, 255, 255));
        Limpiar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/limpiar_campos.png"))); // NOI18N
        Limpiar.setBorder(null);
        Limpiar.setBorderPainted(false);
        Limpiar.setContentAreaFilled(false);
        Limpiar.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        Limpiar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        Limpiar.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/limpiar_campos2.png"))); // NOI18N
        Limpiar.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/limpiar_campos1.png"))); // NOI18N
        Limpiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                LimpiarActionPerformed(evt);
            }
        });
        getContentPane().add(Limpiar);
        Limpiar.setBounds(280, 280, 250, 40);

        minimizar.setBackground(new java.awt.Color(255, 255, 255));
        minimizar.setForeground(new java.awt.Color(255, 255, 255));
        minimizar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/min.png"))); // NOI18N
        minimizar.setBorder(null);
        minimizar.setBorderPainted(false);
        minimizar.setContentAreaFilled(false);
        minimizar.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        minimizar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        minimizar.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/min2.png"))); // NOI18N
        minimizar.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/min1.png"))); // NOI18N
        getContentPane().add(minimizar);
        minimizar.setBounds(470, 0, 40, 40);

        titulo.setBackground(new java.awt.Color(255, 255, 255));
        titulo.setFont(new java.awt.Font("Leelawadee", 1, 12)); // NOI18N
        titulo.setForeground(new java.awt.Color(255, 255, 255));
        titulo.setText("Correo con SMTP Gmail - JavaMail By Ivanovich");
        getContentPane().add(titulo);
        titulo.setBounds(10, 10, 330, 15);

        salir.setBackground(new java.awt.Color(255, 255, 255));
        salir.setForeground(new java.awt.Color(255, 255, 255));
        salir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/exit.png"))); // NOI18N
        salir.setBorder(null);
        salir.setBorderPainted(false);
        salir.setContentAreaFilled(false);
        salir.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        salir.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        salir.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/exit2.png"))); // NOI18N
        salir.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/exit1.png"))); // NOI18N
        salir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                salirActionPerformed(evt);
            }
        });
        getContentPane().add(salir);
        salir.setBounds(510, 0, 40, 40);

        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/cinta.png"))); // NOI18N
        getContentPane().add(jLabel2);
        jLabel2.setBounds(0, 0, 560, 40);

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/fondo.png"))); // NOI18N
        getContentPane().add(jLabel1);
        jLabel1.setBounds(0, 0, 590, 350);

        pack();
    }//                         

    private void salirActionPerformed(java.awt.event.ActionEvent evt) {                                      
        System.exit(0);
    }                                                                      

    private void CancelarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        System.exit(0);
    }                                        

    private void EnviarActionPerformed(java.awt.event.ActionEvent evt) {                                       
        mail.set_desde( this.de.getText() );
        mail.setPassword( this.pass.getPassword() );        
        mail.set_para( this.para.getText() );
        mail.set_asunto( this.asunto.getText() );
        mail.set_Mensaje( this.mensaje.getText() );
        mail.Enviar();
    }                                      

    private void LimpiarActionPerformed(java.awt.event.ActionEvent evt) {                                        
        de.setText("");
        pass.setText("");
        para.setText("");
        asunto.setText("");
        mensaje.setText("");
    }                                       

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //
        /* 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())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Email_JAVA.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Email_JAVA.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Email_JAVA.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Email_JAVA.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Email_JAVA().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton Cancelar;
    private javax.swing.JButton Enviar;
    private javax.swing.JButton Limpiar;
    private javax.swing.JTextField asunto;
    private javax.swing.JScrollPane contenido;
    private javax.swing.JTextField de;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JTextArea mensaje;
    private javax.swing.JButton minimizar;
    private javax.swing.JTextField para;
    private javax.swing.JPasswordField pass;
    private javax.swing.JButton salir;
    private javax.swing.JLabel titulo;
    // End of variables declaration                   
}

La clase procesô_email.java En esta clase se procesa todo sobre la API, lo mas importante!
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 *
 * @author Ivan Luis Jimenez
 */
public class proceso_email {

    private String desde = "";
    private String password = "";
    private InternetAddress[] addressto;
    private String Asunto = "";
    private String Mensaje = "";
    confirmar ob = new confirmar();
    
    public proceso_email() {
    }

    public void Enviar() {
        try {
            Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.user", "ivanthebest10@gmail.com");
            props.put("mail.smtp.port", 587);

            SMTPAuthenticator auth = new SMTPAuthenticator(get_desde(), getPassword());
            Session session = Session.getDefaultInstance(props, auth);
            session.setDebug(false);
            //Se crea destino y origen del mensaje
            MimeMessage mimemessage = new MimeMessage(session);
            InternetAddress addressFrom = new InternetAddress(get_desde());
            mimemessage.setFrom(addressFrom);
            mimemessage.setRecipients(Message.RecipientType.TO, addressto);
            mimemessage.setSubject(get_asunto());
            // Se crea el contenido del mensaje
            MimeBodyPart mimebodypart = new MimeBodyPart();
            mimebodypart.setText(get_Mensaje());
            mimebodypart.setContent(get_Mensaje(), "text/html");
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(mimebodypart);
            mimemessage.setContent(multipart);
            mimemessage.setSentDate(new Date());
            Transport.send(mimemessage);
            ob.setVisible(true);
            ob.mensaje.setText("Se envió correctamante ;-)");
        } catch (MessagingException ex) {
            ob.setVisible(true);
            ob.mensaje2.setText("Error: " + ex.getCause());
            ob.mensaje.setText("No se pudo enviar :-(");
            
           // System.out.println("inova"+ex.getCause());
            
        }

    }

    public void set_desde(String mail) {
        this.desde = mail;
    }

    public String get_desde() {
        return this.desde;
    }

    //Contraseña

    public void setPassword(char[] value) {
        this.password = new String(value);
    }

    public String getPassword() {
        return this.password;
    }

    //destinatarios

    public void set_para(String mails) {
        String[] tmp = mails.split(",");
        addressto = new InternetAddress[tmp.length];
        for (int i = 0; i < tmp.length; i++) {
            try {
                addressto[i] = new InternetAddress(tmp[i]);
            } catch (AddressException ex) {
                System.out.println(ex);
            }
        }
    }

    public InternetAddress[] get_para() {
        return this.addressto;
    }

    //titulo correo

    public void set_asunto(String value) {
        this.Asunto = value;
    }

    public String get_asunto() {
        return this.Asunto;
    }

    //contenido del mensaje

    public void set_Mensaje(String value) {
        this.Mensaje = value;
    }

    public String get_Mensaje() {
        return this.Mensaje;
    }
    
    
}

Y la clase SMTPAuthenticator.java es la encargada de autentificar el correo que estamos ingresando, esto para que compruebe que realmente existe en Google Mail
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 *
 * @author Ivan Luis Jimenez
 */
public class SMTPAuthenticator extends Authenticator{
    
     private String SMTP_AUTH_USER = "";
    private String SMTP_AUTH_PWD = "";

public SMTPAuthenticator() {}

public SMTPAuthenticator(String user , String pass) {
    this.SMTP_AUTH_USER = user;
    this.SMTP_AUTH_PWD = pass;
}

 @Override
public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(this.SMTP_AUTH_USER, this.SMTP_AUTH_PWD);
}
    
}

Y la clase confirmar.java se encuentra el JFrame para mostrar el mensaje de confirmación:
import com.sun.awt.AWTUtilities;


/**
 *
 * @author Ivan Luis Jimenez
 */
public class confirmar extends javax.swing.JFrame {

    /**
     * Creates new form confirmar
     */
    
    public confirmar() {
        initComponents();
        setSize(250, 250);
        setLocationRelativeTo(this);
        AWTUtilities.setWindowOpaque(this, false);
    }

    /**
     * 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")
    //                           
    private void initComponents() {

        salir = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setUndecorated(true);
        getContentPane().setLayout(null);

        mensaje.setForeground(new java.awt.Color(0, 0, 0));
        getContentPane().add(mensaje);
        mensaje.setBounds(10, 50, 200, 30);

        mensaje2.setForeground(new java.awt.Color(255, 0, 0));
        getContentPane().add(mensaje2);
        mensaje2.setBounds(10, 90, 200, 16);

        salir.setBackground(new java.awt.Color(255, 255, 255));
        salir.setForeground(new java.awt.Color(255, 255, 255));
        salir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/exit.png"))); // NOI18N
        salir.setBorder(null);
        salir.setBorderPainted(false);
        salir.setContentAreaFilled(false);
        salir.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        salir.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        salir.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/exit2.png"))); // NOI18N
        salir.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/exit1.png"))); // NOI18N
        salir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                salirActionPerformed(evt);
            }
        });
        getContentPane().add(salir);
        salir.setBounds(180, 0, 40, 40);

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/confirmar.png"))); // NOI18N
        getContentPane().add(jLabel1);
        jLabel1.setBounds(0, 0, 226, 120);

        pack();
    }//                         

    private void salirActionPerformed(java.awt.event.ActionEvent evt) {                                      
        this.setVisible(false);
    }                                     

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //
        /* 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())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(confirmar.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(confirmar.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(confirmar.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(confirmar.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new confirmar().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JLabel jLabel1;
    public static final javax.swing.JLabel mensaje = new javax.swing.JLabel();
    public static final javax.swing.JLabel mensaje2 = new javax.swing.JLabel();
    private javax.swing.JButton salir;
    // End of variables declaration                   
}

Y esto sería prácticamente todo el código del programa.

Les dejo el link de descarga del la librería y el programa:

Link del programa: https://www.mediafire.com/?6y9l8lbv5l1jsw9,xyj7m0b2xp4yp65
Link de la librería: https://www.mediafire.com/?6y9l8lbv5l1jsw9,xyj7m0b2xp4yp65

Bueno esto es todo!
Cualquier duda, comentario o sugerencia dejarlo en la parte de abajo, con gusto contestaré.

Created By Ivan Luis Jimenez.

Comentarios