作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了以下问题,我想知道这里是否有人可以提供帮助。错误如下。
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 方法。 “Contact C=nick...”出现错误
public void save(AddressBook nick, PrintStream print){
Contact C=nick.search(NickName);
if(C!=null)
{
print.println(NickName);
}
else
{
print.println(Email);
}
Message.save 方法 - 出现错误我相信 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 save(String fileName){
Message m1 = null;
AddressBook nick = 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);
}
} catch (FileNotFoundException e) {System.out.println("Mailbox unable to save to file " + myFile);
e.printStackTrace();}}
抱歉格式化,第一次使用这个网站。
最佳答案
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
传递给 m1.save(...)
方法,然后想知道为什么您会收到 NullPointerException。你不应该感到惊讶。
然后将该 AddressBook 参数传递到您的 to.save(nick, print);
方法调用中:
// 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);
}
在您调用的那个方法中,nick.search(NickName);
在上面:
// 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)的一般概念。 你应该批判性地阅读你的异常的堆栈跟踪以找到错误的代码行,抛出异常的行,然后仔细检查那行,找出哪个变量为空,然后追溯到你的代码看看为什么。你会一次又一次地遇到这些,相信我。
关于java - MailClient作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30019965/
我是一名优秀的程序员,十分优秀!