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 ***