我在这段代码中有一个奇怪的问题。当我使用第一个if条件执行代码时,一切正常且符合预期。但是,当我评论该if语句并使用另一个if条件(已经评论过的条件)时,它给出了NPE。
getUserIP() 和 getPhoneNumber() 都是私有字符串的普通 getter。这两个值都是由普通设置者设置的。为什么会这样?
public void sendBroadcast(final String broadcast) {
System.out.println("entered sendBroadcast");
String fullPeep = broadcast;
System.out.println("fullPeep: " + fullPeep);
String array[] = fullPeep.split("<!!>");
for(User tempUser: friends)
{
if(tempUser.getUserIP().equals(this.getUserIP()))
{
System.out.println("tempuser:" + tempUser.getPhoneNumber() + " user: " + array[1]);
//if(tempUser.getPhoneNumber().equals(array[1]))
//{
System.out.println("tempuser:" + tempUser.getPhoneNumber() + " user: " + array[1]);
System.out.println("if statement of broadcast method");
try {
DataOutputStream out2 = new DataOutputStream(socket.getOutputStream());
out2 = tempUser.getUserDataOutputStream();
out2.writeUTF(fullPeep + "\n");
out2.flush();
}
catch (IOException e) {
e.printStackTrace();
}
}
//}
}
}
Exception in thread "Thread-6" java.lang.NullPointerException
at User.sendBroadcast(User.java:180)
at Server$ServerThread.run(Server.java:394)
我弄清楚了导致异常的原因以及 tempUser.getPhoneNumber() 在某些时候返回 null 的原因。