【发布时间】:2014-03-03 06:34:43
【问题描述】:
我在这段代码中有一个奇怪的问题。当我使用第一个 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 的原因。
【问题讨论】:
-
System.out.println("tempuser:" +tempUser.getPhoneNumber() + " user: "+array[1] );打印什么? -
代码的第 180 行是哪一行?
-
那么 tempUser.getPhoneNumber() 为空。只需检查为什么它没有设置值。我的意思是调试代码。
-
你检查了每个用户对象吗?其中至少有一个显然有一个空电话号码。
标签: java nullpointerexception dataoutputstream