简体   繁体   English

如何修复Java数组索引超出范围错误

[英]how to fix the java array index out of bounds error

client server chat system as server start the server and client connect to the server..when client tries to connect to server, it success but the array goes to lost connection condition. 客户端服务器聊天系统作为服务器启动服务器,并且客户端连接到服务器。.当客户端尝试连接到服务器时,它成功,但是阵列进入丢失连接状态。 catch (Exception ex) { outputTextArea.append("Lost a connection. \\n"); ex.printStackTrace(); clientOutputStreams.remove(client);

anyway to fix it? 反正要解决吗?

Server side code 服务器端代码

        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()

errors 错误

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

any idea how to fix the data[2]? 任何想法如何修复数据[2]?

Check if the array has at least 3 elements. 检查数组是否至少包含3个元素。 That is, change 也就是说,改变

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

to

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM