存在数组越界:
问题处在bt1,bt3,bt31,这三个按钮的方法上啊:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.Date; 
import javax.swing.*;
public class Client extends JFrame {
JFrame f1 = new JFrame("聊天1");
JLabel lab1 = new JLabel("用户名 1");
JLabel lab2 = new JLabel("密码1");
JButton bt1 = new JButton("登录1");
JButton bt2 = new JButton("注册1");
JButton bt = new JButton("修改密码");

JTextField text1 = new JTextField(23);//第一个
JPasswordField pasf1 = new JPasswordField(23);//第一个

JFrame f2 = new JFrame("注册表2");
JLabel lab3 = new JLabel("用户名 2");
JLabel lab4 = new JLabel("密码2");
JLabel lab5 = new JLabel("确认密码2");
JButton bt3 = new JButton("确定2");
JButton bt4 = new JButton("取消2");
JTextField text2 = new JTextField(22); //第2个
JPasswordField pasf2 = new JPasswordField(20);//第2个
JPasswordField pasf3 = new JPasswordField(20);//第2个

JFrame f = new JFrame("修改密码3");
JLabel lab31 = new JLabel("用户名 3");
JLabel lab34 = new JLabel("初始密码");
JLabel lab32 = new JLabel("密码3");
JLabel lab33= new JLabel("确认密码3");
JButton bt31 = new JButton("确定3");
JButton bt32 = new JButton("取消3");
JTextField text31 = new JTextField(15); //第3个
JPasswordField pasf31 = new JPasswordField(15);//第3个
JPasswordField pasf32 = new JPasswordField(15);//第3个
JPasswordField pasf33 = new JPasswordField(15);//第3个


JPanel panel1 = new JPanel(new FlowLayout(FlowLayout.LEFT,15,10));
JPanel panel2 = new JPanel(new FlowLayout(FlowLayout.LEFT,70,30));
JPanel panel3 = new JPanel(new FlowLayout(FlowLayout.CENTER,10,10));



JFrame f3 = new JFrame();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JTextArea area1 = new JTextArea(15, 10);
JTextArea area2 = new JTextArea(15, 10);

JScrollPane scroll1 = new JScrollPane(area1);
JScrollPane scroll2 = new JScrollPane(area2);

JButton bt5 = new JButton("发送");
JButton bt6 = new JButton("退出");
List list = new List(15, false);
Checkbox cb = new Checkbox("私聊");


BufferedReader bufferedreader;
PrintStream printStream;

Socket socket ;
boolean bool = true;
ObjectInputStream ois;
ObjectOutputStream oos;


 JPanel imagePanel1;
 ImageIcon background1;
 
public Client(){
    
 f1.add(lab1);
      f1.add(text1);
      f1.add(lab2);
      f1.add(pasf1);
      f1.add(bt1);
      f1.add(bt2);
      f1.add(bt);
background1 = new ImageIcon("F:\\图片\\SogouWP\\2.jpg");
JLabel label = new JLabel(background1);
label.setBounds(0, 0, background1.getIconWidth(),
background1.getIconHeight());
imagePanel1 = (JPanel) f1.getContentPane();
imagePanel1.setOpaque(false);
imagePanel1.setLayout(new FlowLayout());
f1.getLayeredPane().setLayout(null);
f1.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.setSize(background1.getIconWidth(), background1.getIconHeight());
f1.setResizable(false);
f1.setVisible(true);
panel1.add(panel2);

 
    
panel3.add(lab3);
panel3.add(text2);
panel3.add(lab4);
panel3.add(pasf2);
panel3.add(lab5);
panel3.add(pasf3);
panel3.add(bt3);
panel3.add(bt4);
f2.add(panel3);
f2.setSize(350,300);



panel2.add(lab31);
panel2.add(text31);
panel2.add(lab34);
panel2.add(pasf31);
panel2.add(lab32);
panel2.add(pasf33);

panel2.add(lab33);
panel2.add(pasf32);
panel2.add(bt31);
panel2.add(bt32);
f.add(panel2);
f.setSize(400,350);



f3.setSize(350, 200);
f3.add(panel4, BorderLayout.CENTER);
f3.add(panel5, BorderLayout.SOUTH);
f3.add(list, BorderLayout.EAST);
panel5.add(bt5);
panel5.add(bt6);
panel5.add(cb);



panel4.setLayout(new GridLayout(2, 1));
panel4.add(scroll1);
panel4.add(scroll2);

bt1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae1) {
boolean temp = false;

try {
bufferedreader = new BufferedReader(new FileReader("d:\\pwd.txt"));
String sName = null;
while((sName = bufferedreader.readLine()) != null){
String str=text1.getText();
String str1=new String (pasf1.getPassword());
String[] sarr = sName.split(" ");
if((str.equals(sarr[0])) && (str1.equals(sarr[1]))){

temp = true;
break;

}else{
temp = false;
}
}
if(temp == false){

JOptionPane.showMessageDialog(f1, "抱歉,用户名不存在或密码错误!");
}else{
oos.writeObject(text1.getText());
f1.setVisible(false);
f.setVisible(false);
f3.setTitle(text1.getText()+"正在聊天");
f3.setVisible(true); }

bufferedreader.close();

catch (Exception e1) {

}
}
}); bt2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {
f1.setVisible(false);
f.setVisible(false);
f2.setVisible(true);
}
});
bt.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {
f1.setVisible(false);
f2.setVisible(false);
f.setVisible(true);
}
});
bt3.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae2) {
try {

PrintWriter printwrite= new PrintWriter(new FileWriter("d:\\pwd.txt",true));

String s1= text2.getText();
String s2 = new String (pasf2.getPassword());
String s4 = new String (pasf3.getPassword());
String s3 =s1 + " " + s2;

bufferedreader = new BufferedReader(new FileReader("d:\\pwd.txt"));
String ss = bufferedreader.readLine();
int a = 0;
while((ss= bufferedreader.readLine()) != null){
String[] sss = ss.split(" ");
a = compare(sss[0],s1);
if(s2.equals(s4))
{
if(a == 1){
JOptionPane.showMessageDialog(f2,"该名已被使用");
break;
}

ss = bufferedreader.readLine();
         if(a == 0){
printwrite.println(s3);
JOptionPane.showMessageDialog(f2, "恭喜你 ,注册成功");
f2.setVisible(false);
f1.setVisible(true);
break;
}
}
else{
JOptionPane.showMessageDialog(f2,"密码不一致");
  break;
}
}
printwrite.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
bt31.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae2) {
try {

String s1= text31.getText();
String s2 = new String (pasf31.getPassword());
String s4 =new String (pasf32.getPassword());
String s5 = new String (pasf33.getPassword());
String s3 =s1 + " " + s5;
String s6=s1 + " " + s2;
bufferedreader = new BufferedReader(new FileReader("d:\\pwd.txt"));
String ss = bufferedreader.readLine();
int a = 0;
while((ss= bufferedreader.readLine()) != null){
String[] sss = ss.split(" ");
a = compare(sss[0],s1);

if(s5.equals(s4))
{
if(a ==1){
JOptionPane.showMessageDialog(f,"用户名不存在");
break;
}

ss = bufferedreader.readLine();
         if(a == 0){
         
        BufferedReader bis = null;   
     
       FileWriter bos = null;     
       String s = null;    
      try    {       
        bis = new BufferedReader(new FileReader("d:\\pwd.txt"));
        bos = new FileWriter("d:\\test1.txt");              
        while(null != (s = bis.readLine()))    {          
        s = s.replace(s6,s3);
        s= s+"\r\n";
        bos.write(s);    
        }
        System.out.println(s);
           bos.close();   
        bis.close();
        String result1 = "";
        String result2 = "";
        File file = new File("d:\\test1.txt ");
       
        FileReader fd = new FileReader(file);
        BufferedReader br = new BufferedReader(fd);
        String ss1 = br.readLine();
      while(ss1!=null){
      result1 += ss1;
      ss1 = br.readLine();
      }
        File file1 = new File("d:\\pwd.txt");
       
        FileReader ff = new FileReader(file1);
        BufferedReader bb = new BufferedReader(ff);
        String tt = bb.readLine();
        while(tt!=null){
        result2 += tt;
        tt = bb.readLine();
        }
       
        if(result1.equals(result2))
        { JOptionPane.showMessageDialog(f,"用户名与密码不一致");
                    break;
        }
        else{        
        JOptionPane.showMessageDialog(f,"修改成功");
        File inputFile   = new File("d:\\test1.txt");
           File outputFile = new File("d:\\pwd.txt");
           FileReader in   = new FileReader(inputFile);
           FileWriter out  = new FileWriter(outputFile);
           int c;
           while ((c = in.read()) != -1)
            out.write(c);
           in.close();
           out.close();
        }
        f2.setVisible(false);
f.setVisible(false);
f1.setVisible(true);
        break;
       
      }catch(Exception e) {
      }
}
}
else{
JOptionPane.showMessageDialog(f,"密码不一致");
f.setVisible(true);
  break;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});

解决方案 »

  1.   

    剩余程序:
    bt4.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae3) {
    f1.setVisible(true);
    f2.setVisible(false);
    f.setVisible(false);
    }

    });
    bt32.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae3) {
    f1.setVisible(true);
    f.setVisible(false);
    f2.setVisible(false);
    }

    });


    bt5.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae4) {

    try {
    if(cb.getState()){
    oos.writeObject("私聊:"+text1.getText()+":"+list.getSelectedItem() + ":" + area2.getText());

    }else{
    oos.writeObject("群聊:" +text1.getText()+":"+ area2.getText());

    }
    area2.setText("");

    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    });

    bt6.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae5) {

    try {
    oos.writeObject("下线:"+text1.getText());
    System.exit(1);
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
    });

    try {
    socket = new Socket("10.2.57.48", 8888);
    oos = new ObjectOutputStream(socket.getOutputStream());

    ClientThread ct = new ClientThread();
    ct.start();
    } catch (UnknownHostException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }



    }

    class ClientThread extends Thread{

    public void run(){

    try {

    while(bool){
    ois = new ObjectInputStream(socket.getInputStream());
    String s = (String)ois.readObject();

    String[] sarr = s.split(":");
    area1.selectAll();

    if(sarr[0].equals("列表")){
    list.removeAll();
    for(int i = 1; i < sarr.length; i++){
    list.add(sarr[i]);
    }
    }else if(sarr[0].equals("私聊")){
    SimpleDateFormat c = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    area1.append(sarr[1]+"  "+sarr[2]+" "+c.format(new Date())+": "+"\n"+" "+sarr[3]+"\n");
    }else if(sarr[0].equals("群聊")){
    SimpleDateFormat c = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    area1.append(sarr[1]+"  "+c.format(new Date())+" : "+"\n"+" "+sarr[2]+"\n");

    }
    }

    } catch (IOException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();

    }
    }

    public int compare(String s1,String s2){
    int flag = 0;
    if(s1.equals(s2) == true){
    flag = 1;
    }
    return flag;
    }

    public static void main(String[] args) {
    Client c = new Client();       

    }
    }
      

  2.   

    oos.writeObject(text1.getText());
    看看这个输出语句,一般用字节流或字符流.
      

  3.   

    问题处在bt1,bt3,bt31,这三个按钮的方法上啊:
    在哪一行报的错?
    你在程序里面标注一下啊,要不浏览一遍根本找不到。
      

  4.   

    bt1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent ae1) { 
    boolean temp = false;try {
    bufferedreader = new BufferedReader(new FileReader("d:\\pwd.txt"));
    String sName = null;
    while((sName = bufferedreader.readLine()) != null){
    String str=text1.getText();
    String str1=new String (pasf1.getPassword());
    String[] sarr = sName.split(" ");///就是这两行说数组越界
    if((str.equals(sarr[0])) && (str1.equals(sarr[1]))){bt3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent ae2) {
    try {PrintWriter printwrite= new PrintWriter(new FileWriter("d:\\pwd.txt",true));String s1= text2.getText();
    String s2 = new String (pasf2.getPassword());
    String s4 = new String (pasf3.getPassword());
    String s3 =s1 + " " + s2;bufferedreader = new BufferedReader(new FileReader("d:\\pwd.txt"));
    String ss = bufferedreader.readLine();
    int a = 0;
    while((ss= bufferedreader.readLine()) != null){
    String[] sss = ss.split(" ");////////
    a = compare(sss[0],s1);/////就是这三行说数组越界
    if(s2.equals(s4))/////
    {
    }); 
    bt31.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent ae2) {
    try {String s1= text31.getText();
    String s2 = new String (pasf31.getPassword());
    String s4 =new String (pasf32.getPassword());
    String s5 = new String (pasf33.getPassword());
    String s3 =s1 + " " + s5;
    String s6=s1 + " " + s2;
    bufferedreader = new BufferedReader(new FileReader("d:\\pwd.txt"));
    String ss = bufferedreader.readLine();
    int a = 0;
    while((ss= bufferedreader.readLine()) != null){
    String[] sss = ss.split(" ");////
    a = compare(sss[0],s1);///就是这两行说数组越界请帮我找一下错误和怎样修改;
    谢谢
      

  5.   

    键都可用啊.没有问题啊!
    按"登陆"时,要启动服务器端.或者注视掉"oos = new ObjectOutputStream(socket.getOutputStream());"这句都可以.
      

  6.   

    你在文件里建个用户:
    abc 123
    efg 456