我正在尝试编写一个基本的聊天服务器,该服务器会将消息从一个客户端转发到另一个客户端。
我的客户端在另一台笔记本电脑上运行,并且服务器获取了我发送的用户名,因此确定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肯定可以正常工作。
看来您没有初始化clientInputs。
也许将您的声明更改为:
私有HashMap clientInputs = new HashMap();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句