使用javamail阅读邮件时出现异常

使用javamail阅读邮件时出现异常,java,jakarta-mail,netbeans-7,Java,Jakarta Mail,Netbeans 7,我正在尝试实现接收邮件的代码,但是我得到了NullPointerException。 接收从“Settings.java”程序调用的代码的方法是“connect()”,它位于“EmailClient.java”程序中。 身份验证工作成功,但当我尝试将消息头放在向量或数组中时,会出现异常 Settings.java public class Settings extends javax.swing.JFrame { public String uname; public Stri

我正在尝试实现接收邮件的代码,但是我得到了
NullPointerException
。 接收从“Settings.java”程序调用的代码的方法是“connect()”,它位于“EmailClient.java”程序中。 身份验证工作成功,但当我尝试将消息头放在向量或数组中时,会出现异常

Settings.java

public class Settings extends javax.swing.JFrame {

    public String uname;
    public String pass;
    public String smtpserver;
    public String port;
    Object item, item2;
    EmailClient ec;

    public Settings() {
        initComponents();
    }

    public String getUname() {
        return uname;
    }

    public String getPass() {
        return pass;
    }

    public String getSmtpserver() {
        return smtpserver;
    }

    public String getPort() {
        return port;
    }

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

        uname = jTextField1.getText();
        pass = jPasswordField1.getText();

        item = jComboBox1.getSelectedItem();
        smtpserver = (String) item;
        item2 = jComboBox2.getSelectedItem();
        port = (String) item2;

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


    }


    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Settings().setVisible(false);
            }
        });
    }
EmailClient.java

public class EmailClient extends javax.swing.JFrame {

    Settings set = new Settings();
    SendMail sm = new SendMail(set);
    Vector vdate, vsubject, vmessage, vfrom;
    ArrayList adate, asubject, amessage, afrom;
    String[] date;
    String[] subject;
    String[] frm;
    String[] mess;
    Properties props = null;
    private Session session = null;
    private Store store = null;
    private Folder inbox = null;

    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);
    }

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

    public void connect(String user, String pass) {
        final String password = pass;
        final String username = user;
        try {

            props = new Properties();
            props.setProperty("mail.host", "imap.gmail.com");
            props.setProperty("mail.port", "995");
            props.setProperty("mail.transport.protocol", "imaps");

            session = Session.getInstance(props,
                    new javax.mail.Authenticator() {
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(username, password);
                        }
                    }
            );
            store = session.getStore("imaps");
            store.connect();
            Folder inbox = store.getFolder("INBOX");
            inbox.open(Folder.READ_ONLY);
            Message messages[] = inbox.search(new FlagTerm(
                    new Flags(Flags.Flag.SEEN), true));

            for (int i = 0; i < messages.length; i++) {
                Message message = messages[i];
                Address[] from = message.getFrom();
                frm[i] = "" + from[0];//Here is the exception
                date[i] = "" + message.getSentDate();
                Multipart mp = (Multipart) message.getContent();
                BodyPart bp = mp.getBodyPart(0);
                mess[i] = "" + bp.getContent();
                subject[i] = "" + message.getSubject().toString();
            }

        } catch (Exception mex) {
            mex.printStackTrace();
        }

    }


    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new EmailClient().setVisible(true);
            }
        });
    }

但这不是我想要的

错误是

run:
java.lang.NullPointerException
    at sendemail.EmailClient.connect(EmailClient.java:321)
    at sendemail.Settings.jButton1ActionPerformed(Settings.java:176)
    at sendemail.Settings.access$000(Settings.java:25)
    at sendemail.Settings$1.actionPerformed(Settings.java:90)
    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: 1 minute 42 seconds)

您从未为frm阵列分配过任何空间。您声明了指向数组的指针,但必须分配数组。frm=新字符串[某物]

这里有一个固定(但不是最佳)版本:

import java.util.Properties;
导入javax.mail.Address;
导入javax.mail.BodyPart;
导入javax.mail.Flags;
导入javax.mail.Folder;
导入javax.mail.Message;
导入javax.mail.Multipart;
导入javax.mail.Session;
导入javax.mail.Store;
导入javax.mail.search.FlagTerm;
公共类GmailTest{
私有会话=null;
私有属性props=null;
私有存储=空;
私人文件夹收件箱=空;
私有字符串[]日期;
私有字符串[]主题;
私有字符串[]frm;
私人字符串[]混乱;
公共静态void main(字符串[]args){
新建GmailTest().connect(“用户”、“pwd”);
}
公共void连接(字符串用户、字符串传递){
试一试{
props=新属性();
setProperty(“mail.imaps.host”、“imap.gmail.com”);
props.setProperty(“mail.imaps.port”、“993”);
props.setProperty(“mail.store.protocol”、“imaps”);
session=session.getInstance(道具);
store=session.getStore(“imaps”);
存储.连接(用户,通行证);
收件箱=store.getFolder(“收件箱”);
收件箱。打开(文件夹。只读);
messages[]=inbox.search(新的FlagTerm(新的标志(Flags.Flag.SEEN),true));
//如Makoto所说初始化数组
日期=新字符串[messages.length];
主题=新字符串[messages.length];
frm=新字符串[messages.length];
mess=新字符串[messages.length];
for(int i=0;i
某些内容为空,您正在对其调用一个方法。如果突出显示第321行的内容,则更容易分离出该内容。
System.out.println("From : " + from[0]);
run:
java.lang.NullPointerException
    at sendemail.EmailClient.connect(EmailClient.java:321)
    at sendemail.Settings.jButton1ActionPerformed(Settings.java:176)
    at sendemail.Settings.access$000(Settings.java:25)
    at sendemail.Settings$1.actionPerformed(Settings.java:90)
    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: 1 minute 42 seconds)
import java.util.Properties;

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.search.FlagTerm;

public class GmailTest {

    private Session session = null;
    private Properties props = null;
    private Store store = null;
    private Folder inbox = null;
    private String[] date;
    private String[] subject;
    private String[] frm;
    private String[] mess;

    public static void main(String[] args) {
        new GmailTest().connect("user", "pwd");
    }

    public void connect(String user, String pass) {
        try {

            props = new Properties();
            props.setProperty("mail.imaps.host", "imap.gmail.com");
            props.setProperty("mail.imaps.port", "993");
            props.setProperty("mail.store.protocol", "imaps");

            session = Session.getInstance(props);
            store = session.getStore("imaps");
            store.connect(user, pass);
            inbox = store.getFolder("INBOX");
            inbox.open(Folder.READ_ONLY);

            Message messages[] = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), true));

            //initialise arrays as Makoto says
            date = new String[messages.length];
            subject = new String[messages.length];
            frm = new String[messages.length];
            mess = new String[messages.length];

            for (int i = 0; i < messages.length; i++) {
                Message message = messages[i];
                Address[] from = message.getFrom();
                frm[i] = "" + from[0];// Here *was* the exception
                date[i] = "" + message.getSentDate();
                Multipart mp = (Multipart) message.getContent();
                BodyPart bp = mp.getBodyPart(0);
                mess[i] = "" + bp.getContent();
                subject[i] = "" + message.getSubject().toString();
            }

        } catch (Exception mex) {
            mex.printStackTrace();
        } finally {
            close(store);
            close(inbox);
        }

    }

    public static void close(final Folder folder) {
        try {
            if (folder != null && folder.isOpen()) {
                folder.close(false);
            }
        } catch (final Exception e) {
            // ignore
        }

    }

    public static void close(final Store store) {
        try {
            if (store != null && store.isConnected()) {
                store.close();
            }
        } catch (final Exception e) {
            // ignore
        }

    }

}