我无法将用户名和密码从一个jframe转移到另一个jframe

时间:2014-03-19 18:39:01

标签: java javamail netbeans-7

EmailClient.java

package sendemail;

    public class EmailClient extends javax.swing.JFrame {

        SendMail sm=new SendMail();
        Settings set=new Settings();
        public EmailClient() {
            initComponents();
        }


        @SuppressWarnings("unchecked")
        +Generated code                     

        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
           // TODO add your handling code here:
            sm.setVisible(true);
        }                                        

        private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
        }                                        

        private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
        }                                        

        private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
            // TODO add your handling code here:
            set.setVisible(true);
        }                                          

        public static void main(String args[]) {
            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new EmailClient().setVisible(true);
                }
            });
        }

        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JButton jButton2;
        private javax.swing.JButton jButton3;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JLabel jLabel3;
        private javax.swing.JLabel jLabel4;
        private javax.swing.JLabel jLabel5;
        private javax.swing.JLabel jLabel6;
        private javax.swing.JMenu jMenu4;
        private javax.swing.JMenu jMenu5;
        private javax.swing.JMenuBar jMenuBar2;
        private javax.swing.JMenuItem jMenuItem2;
        private javax.swing.JPanel jPanel1;
        private javax.swing.JPanel jPanel3;
        private javax.swing.JPanel jPanel4;
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTextArea jTextArea1;
        // End of variables declaration                   
    }

Settings.java

package sendemail;
    import javax.swing.*;
    import java.awt.*;

    public class Settings extends javax.swing.JFrame {

        public String uname;
        public String pass;
        public String smtpserver;
        public String  port;
        /**
         * Creates new form Settings
         */
        public Settings() {
            initComponents();
        }

        public String getUname() {
            return uname;
        }

        public String getPass() {
            return pass;
        }

        public String getSmtpserver() {
            return smtpserver;
        }

        public String getPort() {
            return port;
        }



        @SuppressWarnings("unchecked")
        +Generated Code                   

        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
           uname=jTextField1.getText().toString();
            pass=jPasswordField1.getPassword().toString();

            smtpserver=jComboBox1.getSelectedItem().toString();
            port=jComboBox2.getSelectedItem().toString();

            if(uname.equals("") || pass.equals("") || smtpserver.equals("") || port.equals("") )
        {
                JOptionPane.showMessageDialog(this,"All Fields are mandatory");
        }                                        
        else
            {
                setVisible(false);
            }

        }                                        

        private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
            // TODO add your handling code here:
        }                                          

        public static void main(String args[]) {
            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new Settings().setVisible(false);
                }
            });
        }

        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JComboBox jComboBox1;
        private javax.swing.JComboBox jComboBox2;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JLabel jLabel3;
        private javax.swing.JLabel jLabel4;
        private javax.swing.JPanel jPanel1;
        private javax.swing.JPasswordField jPasswordField1;
        private javax.swing.JTextField jTextField1;
        // End of variables declaration                   

    }

SendMail.Java

package sendemail;

    import java.util.Properties;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import javax.swing.JOptionPane;
    import java.awt.*;
    import javax.mail.*;
    import javax.mail.MessagingException;


    public class SendMail extends javax.swing.JFrame {

        Settings setfrm=new Settings();
        String subject;
        String from;

        public SendMail() {
            initComponents();
        }


        @SuppressWarnings("unchecked")
        +Generated Code                    

        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
            try
            {
            final String user=setfrm.getUname();
            final String password=setfrm.getPass();
            String portnum=setfrm.getPort();
            String smtpname=setfrm.getSmtpserver();
            String to=jTextField1.getText();
            subject=jTextField2.getText();
            Properties properties=new Properties();
            properties.put("mail.smtp.host",smtpname.toString());
            properties.put("mail.smtp.socketFactory.port",portnum.toString());
            properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
            properties.put("mail.smtp.port",portnum.toString());
            properties.put("mail.smtp.auth","true");
            Session session=Session.getDefaultInstance(properties,
               new javax.mail.Authenticator() {
                   protected PasswordAuthentication getPasswordAuthentication(){
                    return new PasswordAuthentication(user,password);

               }

               }

               );
            MimeMessage message=new MimeMessage(session);
            message.setFrom(new InternetAddress(user));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(jTextField1.getText().toString()));
            message.setSubject(subject);
            message.setText(jTextArea1.getText());
            Transport.send(message);
            JOptionPane.showMessageDialog(null,"message sent");
            }
            catch(MessagingException mex)
            {
                JOptionPane.showMessageDialog(null,mex);
            }
        }                                        

        private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
        }                                        

        private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
            // TODO add your handling code here:
        }                                           

        public static void main(String args[]) {
            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new SendMail().setVisible(true);
                }
            });
        }

        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JButton jButton2;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JPanel jPanel1;
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTextArea jTextArea1;
        private javax.swing.JTextField jTextField1;
        private javax.swing.JTextField jTextField2;
        // End of variables declaration                   

    }

错误

javax.mail.AuthenticationFailedException
    at javax.mail.Service.connect(Service.java:306)
    at javax.mail.Service.connect(Service.java:156)
    at javax.mail.Service.connect(Service.java:105)
    at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:93)
    at javax.mail.Transport.send0(Transport.java:168)
    at javax.mail.Transport.send(Transport.java:98)
    at sendemail.SendMail.jButton1ActionPerformed(SendMail.java:189)
    at sendemail.SendMail.access$100(SendMail.java:25)
    at sendemail.SendMail$2.actionPerformed(SendMail.java:77)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 42 seconds)

我已经看到问题仅在于将值从一帧转移到另一帧。在Settings.java中接受用户名和密码的值并转移到SendEmail.java

2 个答案:

答案 0 :(得分:1)

您有两个Settings类的不同实例 - 一个位于SendMail,另一个位于EmailClient。更改一个实例不会影响另一个实例。在SendMail中创建一个接受Settings实例的构造函数:

public SendMail(Settings settings) {
    this.setfrm = settings;
    initComponents();
}

并修改SendMailEmailClient的初始化:

Settings set=new Settings();
SendMail sm=new SendMail(set);

public EmailClient() {
    initComponents();
}

因此,您确保SendMailEmailClient同时使用同一个Settings实例(有关更多信息,请参阅Java中的参考资料)。

答案 1 :(得分:0)

我在SendEmail.java中看到,你创建了一个新的Settings实例 - >这样的用户名和&密码为空。
然后你启动SendEmail jframe并访问用户名&电子邮件 - >失败。
我想你需要这样做:
- 您定义2个字符串变量来存储用户名&密码
在SendEmail jframe中,您有一个按钮可以打开设置jframe来设置您自己的用户名&密码 - >更新已更改为用户名&密码在SendEmail :)