Я пытаюсь изучить чат-сервер с несколькими клиентами. Поскольку я новичок в Java, я не могу запустить эти два .java-файла в Net beans. У меня есть два java-проекта и поместил в них эти файлы. Проект Сервер работает успешно, но проект клиент показывает:Как исправить этот индекс массива из исключения Bounds?
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at chatClient.main(chatClient.java:73)
Заказчик проекта
import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.*;
class chatClient extends Frame implements Runnable {
Socket soc;
TextField tf;
TextArea ta;
Button btnSend, btnClose;
String sendTo;
String LoginName;
Thread t = null;
DataOutputStream dout;
DataInputStream din;
chatClient(String LoginName, String chatwith) throws Exception {
super(LoginName);
this.LoginName = LoginName;
sendTo = chatwith;
tf = new TextField(50);
ta = new TextArea(50, 50);
btnSend = new Button("Send");
btnClose = new Button("Close");
soc = new Socket("127.0.0.1", 5217);
din = new DataInputStream(soc.getInputStream());
dout = new DataOutputStream(soc.getOutputStream());
dout.writeUTF(LoginName);
t = new Thread(this);
t.start();
}
void setup() {
setSize(600, 400);
setLayout(new GridLayout(2, 1));
add(ta);
Panel p = new Panel();
p.add(tf);
p.add(btnSend);
p.add(btnClose);
add(p);
show();
}
public boolean action(Event e, Object o) {
if (e.arg.equals("Send")) {
try {
dout.writeUTF(sendTo + " " + "DATA" + " " + tf.getText().toString());
ta.append("\n" + LoginName + " Says:" + tf.getText().toString());
tf.setText("");
} catch (Exception ex) {
}
} else if (e.arg.equals("Close")) {
try {
dout.writeUTF(LoginName + " LOGOUT");
System.exit(1);
} catch (Exception ex) {
}
}
return super.action(e, o);
}
public static void main(String args[]) throws Exception {
chatClient Client1 = new chatClient(args[0],args[1]);
Client1.setup();
}
public void run() {
while (true) {
try {
ta.append("\n" + sendTo + " Says :" + din.readUTF());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
Project Server
import java.net.*;
import java.util.*;
import java.io.*;
class chatServer {
static Vector ClientSockets;
static Vector LoginNames;
chatServer() throws Exception {
ServerSocket soc = new ServerSocket(5217);
ClientSockets = new Vector();
LoginNames = new Vector();
while (true) {
Socket CSoc = soc.accept();
AcceptClient obClient = new AcceptClient(CSoc);
}
}
public static void main(String args[]) throws Exception {
chatServer ob = new chatServer();
}
class AcceptClient extends Thread {
Socket ClientSocket;
DataInputStream din;
DataOutputStream dout;
AcceptClient(Socket CSoc) throws Exception {
ClientSocket = CSoc;
din = new DataInputStream(ClientSocket.getInputStream());
dout = new DataOutputStream(ClientSocket.getOutputStream());
String LoginName = din.readUTF();
System.out.println("User Logged In :" + LoginName);
LoginNames.add(LoginName);
ClientSockets.add(ClientSocket);
start();
}
public void run() {
while (true) {
try {
String msgFromClient = new String();
msgFromClient = din.readUTF();
StringTokenizer st = new StringTokenizer(msgFromClient);
String Sendto = st.nextToken();
String MsgType = st.nextToken();
int iCount = 0;
if (MsgType.equals("LOGOUT")) {
for (iCount = 0; iCount < LoginNames.size(); iCount++) {
if (LoginNames.elementAt(iCount).equals(Sendto)) {
LoginNames.removeElementAt(iCount);
ClientSockets.removeElementAt(iCount);
System.out.println("User " + Sendto + " Logged Out ...");
break;
}
}
} else {
String msg = "";
while (st.hasMoreTokens()) {
msg = msg + " " + st.nextToken();
}
for (iCount = 0; iCount < LoginNames.size(); iCount++) {
if (LoginNames.elementAt(iCount).equals(Sendto)) {
Socket tSoc = (Socket) ClientSockets.elementAt(iCount);
DataOutputStream tdout = new DataOutputStream(tSoc.getOutputStream());
tdout.writeUTF(msg);
break;
}
}
if (iCount == LoginNames.size()) {
dout.writeUTF("I am offline");
} else {
}
}
if (MsgType.equals("LOGOUT")) {
break;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
Спасибо заранее.
Возможно, вы, вероятно, не указывайте аргументы 'args [0], args [1]', поэтому вы получаете исключение, потому что 'args' пуст. – t3chb0t
как отмечено в @ t3chb0t, вы можете проверить' args.length' перед тем, как читать это –
Какая строка является строкой '73' в' chatClient'? – Jens