我正在尝试编写一个基本的聊天服务器,它将消息从一个客户端转发到另一个客户端。
我的客户端在另一台笔记本电脑上运行,服务器获取了我发送的用户名,所以ObjectInputStream不是null,用户名不是null?
这是HashMap和ObjectInputStream:
private Socket[] clientSocket = new Socket[100];
private ObjectInputStream[] fromClient = new ObjectInputStream[100];
private ObjectOutputStream[] toClient = new ObjectOutputStream[100];
private HashMap<String, ObjectInputStream> clientInputs= new HashMap<String, ObjectInputStream>();
private HashMap<String, ObjectOutputStream> clientOutputs= new HashMap<String, ObjectOutputStream>();;
这是我得到空指针异常的位:
//This is just for testing:
System.out.println("User name is :" +userName);
System.out.println("fromClient[i] is " +fromClient[i].toString());
Thread.sleep(1000);
//Add this user to all lists.
clientInputs.put(userName , (ObjectInputStream)fromClient[i]);*
clientOutputs.put(userName, (ObjectOutputStream)toClient[i]);
onlineUsers[i] = userName;
我得到:[第105行是clientInputs.put(...,...)行;我用*。标记的地方。
User name is :hulo
fromClient[i] is java.io.ObjectInputStream@147c5fc
Exception in thread "Thread-0" java.lang.NullPointerException
at AcceptConnections.addNextUser(AcceptConnections.java:105)
at AcceptConnections.run(AcceptConnections.java:53)
我不知道这是否与它有关,但没有Thread.sleep(1000); NullPointerException在“用户名是”行之后但在“fromClient [i]”行之前出现。
编辑:我不确定我是否说清楚了,但是这些代码行是在我的客户端程序连接到服务器之后,因此用户名是在测试运行期间从客户端获取的用户名,因此ObjectInputStream肯定在工作。
答案 0 :(得分:0)
看起来你没有初始化clientInputs。
可能会将您的声明更改为:
private HashMap clientInputs = new HashMap();