Java 尝试删除Jlist的项目

Java 尝试删除Jlist的项目,java,swing,indexoutofboundsexception,jlist,remove,Java,Swing,Indexoutofboundsexception,Jlist,Remove,我试图在实时执行中删除Jlist中的项目,但始终会收到一条持续错误消息。列表中的项目由用户名组成,当服务器发送特定消息时,应删除这些用户名 package com.yorkrider; import javax.swing.*; import java.net.*; import java.io.*; import java.util.ArrayList; import java.util.Scanner; import javax.swing.JOptionPane; public cla

我试图在实时执行中删除Jlist中的项目,但始终会收到一条持续错误消息。列表中的项目由用户名组成,当服务器发送特定消息时,应删除这些用户名

package com.yorkrider;

import javax.swing.*;
import java.net.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class A_Chat_Client implements Runnable
{
    // globals
    Socket SOCK;
    Scanner INPUT;
    Scanner SEND = new Scanner(System.in);
    PrintWriter OUT;
    ArrayList<String> Users = new ArrayList<String>();
    // -----------------------------------------------------------------------------------
    public A_Chat_Client(Socket X)
    {
        this.SOCK = X;
    }
    // -----------------------------------------------------------------------------------
    public void run()
    {
        try
        {
            try
            {
                INPUT = new Scanner(SOCK.getInputStream());
                OUT = new PrintWriter(SOCK.getOutputStream());
                OUT.flush();
                CheckStream();
            }
            finally
            {
                SOCK.close();
            }
        }
        catch(Exception X) { System.out.print(X); }
    }
// ---------------------------------------------------------------------------------

    public void DISCONNECT() throws IOException
    {
        OUT.println(A_Chat_Client_GUI.UserName + " has disconnected");
        OUT.flush();
        Remove_User(A_Chat_Client_GUI.UserName, SOCK);
        //SOCK.close();
        JOptionPane.showMessageDialog(null, "You Disconnected");

        //Users.removeAll();
        //System.exit(0);
    }
    // ---------------------------------------------------------------------------------
    public void CheckStream()
    {
        while(true)
        {
            RECEIVE();
            //A_Chat_Client_GUI.JL_ONLINE.setListData(Users)
        }
    }
    // ---------------------------------------------------------------------------------
    public void RECEIVE()
    {
        if(INPUT.hasNext())
        {
            String MESSAGE = INPUT.nextLine();

            if(MESSAGE.contains("#?!"))
            {
                String TEMP1 = MESSAGE.substring(3);
                TEMP1 = TEMP1.replace("[","");
                TEMP1 = TEMP1.replace("]", "");

                String[] CurrentUsers = TEMP1.split(", ");
                A_Chat_Client_GUI.JL_ONLINE.setListData(CurrentUsers);
                //Users.add(TEMP1);

                A_Chat_Client_GUI.TA_CONVERSATION.append(A_Chat_Server.CurrentUsers.get(
                        A_Chat_Server.CurrentUsers.size()-1) +" has joined on IP address "+
                        A_Chat_Client_GUI.HostIP+" and port number "+A_Chat_Client_GUI.PortNumber +"\n");
                A_Chat_Client_GUI.JL_ONLINE.removeAll();
                System.out.println(Users);

            }
//----------------The problem is here-------------------------
            else if(MESSAGE.contains("@!@")) {
                String TEMP1 = MESSAGE.substring(3);
                TEMP1 = TEMP1.replace("[", "");
                TEMP1 = TEMP1.replace("]", "");
                for(int j=0; j < A_Chat_Client_GUI.JL_ONLINE.getModel().getSize(); j++){
                    if (TEMP1.equals(A_Chat_Client_GUI.JL_ONLINE.getModel().getElementAt(j))){
                        A_Chat_Client_GUI.JL_ONLINE.getModel().remove(j);
                    }
                }
            }
//--------------------The problem is here------------------------
            else
            {
                A_Chat_Client_GUI.TA_CONVERSATION.append(MESSAGE + "\n");
            }
        }
    }
// ---------------------------------------------------------------------------------

    public void SEND(String X)
    {
        OUT.println(A_Chat_Client_GUI.UserName + ": " + X);
        OUT.flush();
        A_Chat_Client_GUI.TF_Message.setText("");
    }
// ---------------------------------------------------------------------------------
  
    public static void Remove_User(String UserName, Socket SOCK) throws IOException
    {
        Socket TEMP_SOCK = SOCK;
        PrintWriter OUT = new PrintWriter(TEMP_SOCK.getOutputStream());
        OUT.println("@!@" + UserName);
        System.out.println(UserName);
        OUT.flush();
    }
   
}
package.com;
导入javax.swing.*;
导入java.net。*;
导入java.io.*;
导入java.util.ArrayList;
导入java.util.Scanner;
导入javax.swing.JOptionPane;
公共类A_Chat_客户端实现可运行
{
//全球的
插座;
扫描仪输入;
扫描仪发送=新扫描仪(System.in);
打印输出;
ArrayList用户=新建ArrayList();
// -----------------------------------------------------------------------------------
公共聊天客户端(套接字X)
{
这个.SOCK=X;
}
// -----------------------------------------------------------------------------------
公开募捐
{
尝试
{
尝试
{
输入=新扫描仪(SOCK.getInputStream());
OUT=新的PrintWriter(SOCK.getOutputStream());
OUT.flush();
CheckStream();
}
最后
{
SOCK.close();
}
}
catch(异常X){System.out.print(X);}
}
// ---------------------------------------------------------------------------------
public void DISCONNECT()引发IOException
{
println(A_Chat_Client_GUI.UserName+“已断开连接”);
OUT.flush();
删除用户(聊天客户端用户名,SOCK);
//SOCK.close();
showMessageDialog(null,“您已断开连接”);
//Users.removeAll();
//系统出口(0);
}
// ---------------------------------------------------------------------------------
公共void CheckStream()
{
while(true)
{
接收();
//A_Chat_Client_GUI.JL_ONLINE.setListData(用户)
}
}
// ---------------------------------------------------------------------------------
公共接收()
{
if(INPUT.hasNext())
{
字符串消息=INPUT.nextLine();
if(MESSAGE.contains(“#?!”)
{
字符串TEMP1=MESSAGE.substring(3);
TEMP1=TEMP1。替换(“[”,”);
TEMP1=TEMP1。替换(“]”,“”);
字符串[]CurrentUsers=TEMP1.split(“,”);
A_Chat_Client_GUI.JL_ONLINE.setListData(CurrentUsers);
//Users.add(TEMP1);
A_Chat_Client_GUI.TA_CONVERSATION.append(A_Chat_Server.CurrentUsers.get(
A_Chat_Server.CurrentUsers.size()-1)+“已在IP地址上加入”+
A_Chat_Client_GUI.HostIP+”和端口号“+A_Chat_Client_GUI.PortNumber+”\n”);
A_Chat_Client_GUI.JL_ONLINE.removeAll();
System.out.println(用户);
}
//----------------问题就在这里-------------------------
else if(MESSAGE.contains(“@!@”)){
字符串TEMP1=MESSAGE.substring(3);
TEMP1=TEMP1。替换(“[”,”);
TEMP1=TEMP1。替换(“]”,“”);
对于(int j=0;j
这是永久性错误消息的错误消息:


java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:0

如果没有类的实现,我无法理解您的代码,但您可能需要:

A_Chat_Client_GUI.JL_ONLINE.getModel().remove(j);
而不是:

A_Chat_Client_GUI.JL_ONLINE.remove(j);
的循环
应从最后一个索引开始:

for (int j = A_Chat_Client_GUI.JL_ONLINE.getModel().getSize() - 1; j >= 0; j--) {
    if (TEMP1.equals(A_Chat_Client_GUI.JL_ONLINE.getModel().getElementAt(j))) {
        A_Chat_Client_GUI.JL_ONLINE.getModel().remove(j);
    }
}

这样,在删除任何变量后,未扫描的索引将保持在同一位置(保持相同的索引
j

1)变量名称不应大写。2) 变量名不应包含“\u1”。学习并遵循Java约定。您阅读的任何教科书或教程都将遵循标准。3) 当测试条件为“j”时,为什么要尝试删除“j+1”?4) 在解决上述问题后,发布一篇适当的演示文章。(1-)解决一个陈述没有帮助。我们仍然不知道是什么说法导致了这个问题。我们不知道“message”变量的值是什么。我们不知道“temp1”的值是多少。我们不知道您的JList中包含哪些数据。当你创建MRE时,你很可能会发现问题,因为你的问题似乎是一个简单的打字错误。它显示了如何在JList中硬编码数据。然后将删除按钮替换为文本字段,以便删除用户输入的项目。一旦你开始工作,你就会明白简单代码和真实代码之间的区别。我用完整的实现进行了编辑,也尝试了这个解决方案,但它只是返回了另一个错误。