存在数组越界:
问题处在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();
}
}
});
问题处在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();
}
}
});
解决方案 »
- java菜鸟问题
- JMSN还能登录吗?
- 普通刻录光盘,我选则DVD格式,可以刻录成功吗?(刻录的文件很小)!!!!请高手!!!
- 为什么我的jsp页面会显示数据库中的null标志啊?
- 看看这是什么错误
- 关于session 的问题!
- 请问谁有UML或者JDBC的电子书籍?
- JBuilder好像没用啊.
- 各位大虾,为什么我的java程序能通过编译,但是在用java命令运行程序的时候却老是报错“Exception in thread "main" java.lang.NoClassDe
- 为什么我的cpu达到了100%
- java.lang.NullPointerException
- JVM INSTR monitorexit 这个是什么意思了?多谢
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();
}
}
看看这个输出语句,一般用字节流或字符流.
在哪一行报的错?
你在程序里面标注一下啊,要不浏览一遍根本找不到。
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);///就是这两行说数组越界请帮我找一下错误和怎样修改;
谢谢
按"登陆"时,要启动服务器端.或者注视掉"oos = new ObjectOutputStream(socket.getOutputStream());"这句都可以.
abc 123
efg 456