Java 阵列索引边界外提取

Java 阵列索引边界外提取,java,Java,这是我的多聊天应用程序的客户端。出于某种原因,在main函数的第一行中,我尝试创建一个新的聊天客户端,它给了我一个数组索引越界异常。我想知道我是否做错了什么。任何帮助都将不胜感激。下面是客户端的全部代码,但我在主函数后的第一行遇到了问题 import java.net.*; import java.io.*; import java.awt.*; @SuppressWarnings("serial") class chatClient extends Frame implements Runn

这是我的多聊天应用程序的客户端。出于某种原因,在main函数的第一行中,我尝试创建一个新的聊天客户端,它给了我一个数组索引越界异常。我想知道我是否做错了什么。任何帮助都将不胜感激。下面是客户端的全部代码,但我在主函数后的第一行遇到了问题

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正如我在回答中所说,在运行命令时必须指定参数。请重读我的答案…我确实读了你的答案,但我有点困惑。我应该如何指定参数?请对我耐心点。我仍在发展我的编码技能。谢谢