繁体   English   中英

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

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

客户端服务器聊天系统作为服务器启动服务器,并且客户端连接到服务器。.当客户端尝试连接到服务器时,它成功,但是阵列进入丢失连接状态。 catch (Exception ex) { outputTextArea.append("Lost a connection. \\n"); ex.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)) {

暂无
暂无

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

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