簡體   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