Java 阵列索引边界外提取
这是我的多聊天应用程序的客户端。出于某种原因,在main函数的第一行中,我尝试创建一个新的聊天客户端,它给了我一个数组索引越界异常。我想知道我是否做错了什么。任何帮助都将不胜感激。下面是客户端的全部代码,但我在主函数后的第一行遇到了问题Java 阵列索引边界外提取,java,Java,这是我的多聊天应用程序的客户端。出于某种原因,在main函数的第一行中,我尝试创建一个新的聊天客户端,它给了我一个数组索引越界异常。我想知道我是否做错了什么。任何帮助都将不胜感激。下面是客户端的全部代码,但我在主函数后的第一行遇到了问题 import java.net.*; import java.io.*; import java.awt.*; @SuppressWarnings("serial") class chatClient extends Frame implements Runn
import java.net.*;
import java.io.*;
import java.awt.*;
@SuppressWarnings("serial")
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("localhost",12342);
din = new DataInputStream(soc.getInputStream());
dout = new DataOutputStream(soc.getOutputStream());
dout.writeUTF(LoginName);
t = new Thread(this);
t.start();
}
@SuppressWarnings("deprecation")
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();
}
@SuppressWarnings("deprecation")
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){
ex.printStackTrace();
}
}
else if(e.arg.equals("Close")){
try{
dout.writeUTF(LoginName + " LOGOUT");
System.exit(1);
}
catch(Exception ex){
ex.printStackTrace();
}
}
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();
}
}
}
}
args
变量的长度不是2。此变量存储传递给应用程序的命令行参数
您可能忘了传递命令行参数。如果使用的是命令行,则可以这样指定它们:
java chatClient "arg1" "arg2"
如果使用IDE(如Eclipse)来构建和运行应用程序,则需要查找IDE的特定说明。能否显示堆栈跟踪?是否忘记传入命令行参数?无论如何,检查
args
的大小并在用户忘记指定某些必需参数时通知用户是很好的。您有什么具体的建议我试试吗?我使用的是Eclipse,但它不起作用。我刚刚尝试从终端运行它,但都没有用。C:\James\Workspace\ChatApp\bin>java聊天服务器C:\James\Workspace\ChatApp\bin>javachatClient@James正如我在回答中所说,在运行命令时必须指定参数。请重读我的答案…我确实读了你的答案,但我有点困惑。我应该如何指定参数?请对我耐心点。我仍在发展我的编码技能。谢谢