Java 尝试删除Jlist的项目
我试图在实时执行中删除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
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中硬编码数据。然后将删除按钮替换为文本字段,以便删除用户输入的项目。一旦你开始工作,你就会明白简单代码和真实代码之间的区别。我用完整的实现进行了编辑,也尝试了这个解决方案,但它只是返回了另一个错误。