java - 如何修复java数组索引越界错误

标签 java arrays client-server

客户端服务器聊天系统作为服务器启动服务器并且客户端连接到服务器。当客户端尝试连接到服务器时,它成功,但阵列进入丢失连接状态。 捕获(异常前){ outputTextArea.append("失去连接。\n"); 例如:printStackTrace(); clientOutputStreams.remove(client);

无论如何要修复它吗?

服务器端代码

        public ClientHandler(Socket clientSocket, PrintWriter user) {
    // new inputStreamReader and then add it to a BufferedReader
                    client = user;
        try {
            sock = clientSocket;
            InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
            reader = new BufferedReader(isReader);
        } // end try
        catch (Exception ex) {
            outputTextArea.append("Error beginning StreamReader. \n");
        } // end catch

    } // end ClientHandler()

    public void run() {
                    String message, connect = "Connect", disconnect = "Disconnect", chat = "Chat" ;
        String[] data;

        try {
            while ((message = reader.readLine()) != null) {

                outputTextArea.append("Received: " + message + "\n");
                data = message.split(":");
                                    for (String token:data) {

                                    outputTextArea.append(token + "..\n");

                                    }

                                    if (data[2].equals(connect)) {

                                            tellEveryone((data[0] + ":" + data[1] + ":" + chat));
                                            userAdd(data[0]);

                } else if (data[2].equals(disconnect)) {

                                        tellEveryone((data[0] + ":has disconnected." + ":" + chat));
                                        userRemove(data[0]);

                } else if (data[2].equals(chat)) {

                                        tellEveryone(message);

                } else {
                                        outputTextArea.append("No Conditions were met. \n");
                                    }


             } // end while
        } // end try
        catch (Exception ex) {
            outputTextArea.append("Lost a connection. \n");
                            ex.printStackTrace();
                            clientOutputStreams.remove(client);
        } // end catch
    } // end run()
    public void userAdd (String data) {
        String message, add = ": :Connect", done = "Server: :Done", name = data;
        outputTextArea.append("Before " + name + " added. \n");
        userlist.add(name);
        outputTextArea.append("After " + name + " added. \n");
        String[] tempList = new String[(userlist.size())];
        userlist.toArray(tempList);

            for (String token:tempList) {

                message = (token + add);
                tellEveryone(message);
            }
            tellEveryone(done);
}

public void userRemove (String data) {
            String message, add = ": :Connect", done = "Server: :Done", name = data;
            userlist.remove(name);
            String[] tempList = new String[(userlist.size())];
    userlist.toArray(tempList);

            for (String token:tempList) {

                message = (token + add);
                tellEveryone(message);
            }
            tellEveryone(done);
}

    public void tellEveryone(String message) {
// sends message to everyone connected to server
    Iterator it = clientOutputStreams.iterator();

    while (it.hasNext()) {
        try {
            PrintWriter writer = (PrintWriter) it.next();
            writer.println(message);
            writer.flush();
                            outputTextArea.setCaretPosition(outputTextArea.getDocument().getLength());

        } // end try
        catch (Exception ex) {
            outputTextArea.append("Error telling everyone. \n");
        } // end catch
    } // end while
} // end tellEveryone()

错误

java.lang.ArrayIndexOutOfBoundsException: 2
at chatsystemserver.ServerSide$ClientHandler.run(ServerSide.java:55)
at java.lang.Thread.run(Thread.java:745)

知道如何修复数据[2]吗?

最佳答案

检查数组是否至少有 3 个元素。即改变

if (data[2].equals(connect)) {

if (data.length > 2 && data[2].equals(connect)) {

关于java - 如何修复java数组索引越界错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25518516/

相关文章:

c - 如何初始化数组并填充缓冲区中的字符?

java - 降序选择排序

javascript - 我应该重新编写游戏服务器、编写转发器还是使用新插件?

java - 需要说明一下Spring的好处

java - 从文本中提取名词 (Java)

java - 根据对象的属性值过滤列表 - Java/Javascript?(首选流/功能类型的方法)

c - 从二维数组分配指针

java - 如何编写服务器/客户端视频和音频流应用程序的代码?

java - 仅发送图像/视频文件时出错

java - 在 if 语句中将变量设置为值