Java 邮件客户端作业

Java 邮件客户端作业,java,Java,我有以下问题,我想知道这里是否有人可以帮忙。错误如下所示 Exception in thread "main" java.lang.NullPointerException at client.Contact.save(Contact.java:35) at client.Message.save(Message.java:44) at client.Mailbox.save(Mailbox.java:62) at client.cmd.Save.run(Save.java:15) at cli

我有以下问题,我想知道这里是否有人可以帮忙。错误如下所示

Exception in thread "main" java.lang.NullPointerException
at client.Contact.save(Contact.java:35)
at client.Message.save(Message.java:44)
at client.Mailbox.save(Mailbox.java:62)
at client.cmd.Save.run(Save.java:15)
at client.CmdLoop.run(CmdLoop.java:53)
at Main.main(Main.java:41)
Contact.save方法。“联系人C=nick…”上出现错误

Message.save method-出现错误我相信to.save和from.save

public void save(AddressBook nick, PrintStream print){
to.save(nick, print);
from.save(nick, print);
print.println(body);
print.println(subject);
print.println(date);}
最后,Mailbox.save方法-错误出现在“m1.save(nick,myStream)”上

public void保存(字符串文件名){
消息m1=null;
地址簿尼克=空;
File myFile=新文件(文件名);
试一试{
PrintStream myStream=新的PrintStream(myFile);
对于(int n=0;n
很抱歉格式化,第一次使用此网站

public void save(String fileName){
    Message m1 = null;
    AddressBook nick = null;               //  **** null!! ****
    File myFile = new File(fileName);
    try {
        PrintStream  myStream = new PrintStream(myFile);
        for(int n=0; n < mailbox.size(); n++)
        {
            m1 = mailbox.get(n);
            m1.save(nick, myStream);       // **** nick still null! ****
        }
    } catch (FileNotFoundException e) {System.out.println("Mailbox unable to save to file " + myFile);
        e.printStackTrace();
    }
}
在您调用的方法中,
nick.search(昵称)在其上:

// yep, nick is still null
public void save(AddressBook nick, PrintStream print) {
    // below you try to call a method off of a null reference
    Contact C = nick.search(NickName); // so you get a NPE here ***
但是由于它仍然是空的,程序会抛出一个NPE,这也就不足为奇了

解决方案:不要将null传递到此方法调用中


更重要的是,您需要学习如何调试NPE(NullPointerException)的一般概念您应该仔细阅读异常的stacktrace,找到出错的代码行,即引发异常的代码行,然后仔细检查该行,找出哪个变量为null,然后回溯到代码中以了解原因。相信我,你会一次又一次地遇到这些问题。

一个好的开始是从NullPointerException的含义开始:也看看这个类似的问题:。请查看要回答的编辑。这是一个很好的答案,有一些很好的指针。除了信息丰富的例外情况和中学的阅读技巧,人们应该很少需要外部资源来调试;我把它改成了地址簿尼克=新地址簿();程序不再终止。谢谢你的帮助。@Efrain:不客气,但我不能说你的解决方案是100%正确的。您是否在该项目的其他任何地方使用AddressBook对象?如果是这样,您可能需要注意将正确的AddressBook实例传递到您的方法中,该方法是程序其余部分正在使用的方法。是的,您是对的,它不是100%正确的,基本上是在保存我的收件箱/发件箱邮件和联系人后,使用命令“sv”,输出为“null找不到”但它最终将它们保存在文件中,这正是我所需要的。我相信我不需要再使用通讯录了。
public void save(String fileName){
    Message m1 = null;
    AddressBook nick = null;               //  **** null!! ****
    File myFile = new File(fileName);
    try {
        PrintStream  myStream = new PrintStream(myFile);
        for(int n=0; n < mailbox.size(); n++)
        {
            m1 = mailbox.get(n);
            m1.save(nick, myStream);       // **** nick still null! ****
        }
    } catch (FileNotFoundException e) {System.out.println("Mailbox unable to save to file " + myFile);
        e.printStackTrace();
    }
}
// the nick parameter is still null
public void save(AddressBook nick, PrintStream print){
    to.save(nick, print);   // **** and so null is passed in here
    from.save(nick, print);
    print.println(body);
    print.println(subject);
    print.println(date);
}
// yep, nick is still null
public void save(AddressBook nick, PrintStream print) {
    // below you try to call a method off of a null reference
    Contact C = nick.search(NickName); // so you get a NPE here ***