问题描述
我们的大作业是编写一个模拟的聊天室我在运行服务器后直接运行两次客户端就可以实现互相的通信,但是登录两个不同的账号后能出现客户端界面,但是发送信息时没任何反应,不报错也不抛异常,不知道什么原因,希望能够得到帮助,先谢谢了!下面贴代码服务器:ChatServer.javapackagecom.cy.chat;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.ArrayList;importjava.util.List;publicclassChatServer{publicstaticvoidmain(String[]args)throwsException{Listsockets=newArrayList();ServerSocketss=newServerSocket(9010);while(true){Sockets=ss.accept();sockets.add(s);Threadt=newChatThread(s,sockets);t.start();}}}classChatThreadextendsThread{Sockets;Listsockets;publicChatThread(Sockets,Listsockets){this.s=s;this.sockets=sockets;}publicvoidrun(){try{BufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream()));while(true){Stringstr=in.readLine();if(str==null)return;for(inti=0;i<sockets.size();i++){Sockets2=(Socket)sockets.get(i);PrintWriterout=newPrintWriter(s2.getOutputStream());out.println(str);out.flush();}}}catch(IOExceptione){}finally{sockets.remove(s);try{s.close();}catch(IOExceptione){}}}}
客户端:ChatClient.javapackagecom.cy.chat;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.Socket;importjavax.swing.JButton;importjavax.swing.JTextArea;importjavax.swing.JTextField;importjavax.swing.WindowConstants;importcom.cy.sign.SignUpJFrame;importcom.cy.usersql.User;importcom.cy.usersql.UserBO;publicclassChatClientextendsjavax.swing.JFrame{privateJTextAreajTextArea1;privateJTextFieldjTextField1;privateJButtonjButton1;BufferedReaderin;PrintWriterout;Sockets;Stringname;publicstaticvoidmain(String[]args){//SwingUtilities.invokeLater(newRunnable(){//publicvoidrun(){ChatClientinst=newChatClient();inst.setVisible(true);inst.receive();//}//});}publicChatClient(){super();initGUI();initNet();}publicvoidreceive(){try{while(true){Stringstr=in.readLine();if(str==null)return;jTextArea1.append(str+"n");}}catch(IOExceptione){}}privatevoidinitNet(){try{s=newSocket("127.0.0.1",9010);out=newPrintWriter(s.getOutputStream());in=newBufferedReader(newInputStreamReader(s.getInputStream()));}catch(Exceptione){e.printStackTrace();}}privatevoidinitGUI(){try{setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);getContentPane().setLayout(null);{Useru=newUser();UserBObo=newUserBO();jTextArea1=newJTextArea();//文本显示框jTextArea1.setEditable(false);getContentPane().add(jTextArea1);jTextArea1.setText("你好"+bo.queryUserById(SignUpJFrame.id).getName()+",欢迎进入聊天室!n");jTextArea1.setBounds(0,0,384,224);}{jTextField1=newJTextField();//文本输入框getContentPane().add(jTextField1);jTextField1.setText("");jTextField1.setBounds(0,225,315,37);}{jButton1=newJButton();//发送按钮getContentPane().add(jButton1);jButton1.setText("u53d1u9001");jButton1.setFont(newjava.awt.Font("微软雅黑",0,11));jButton1.setBounds(314,225,70,37);jButton1.addActionListener(newOkListener());}pack();setSize(400,300);}catch(Exceptione){e.printStackTrace();}}classOkListenerimplementsActionListener{publicvoidactionPerformed(ActionEventarg0){UserBObo=newUserBO();Useru=newUser();try{name=bo.queryUserById(SignUpJFrame.id).getName();}catch(Exceptione){e.printStackTrace();}Stringtext=jTextField1.getText();jTextField1.setText("");out.println(name+":"+text);out.flush();}}}
登录:packagecom.cy.sign;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.net.Socket;importjavax.swing.JButton;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.SwingUtilities;importjavax.swing.WindowConstants;importcom.cy.chat.ChatServer;importcom.cy.chat.ChatClient;importcom.cy.usersql.User;importcom.cy.usersql.UserBO;publicclassSignUpJFrameextendsjavax.swing.JFrame{privateJLabeljLabel1;privateJLabeljLabel2;privateJButtonjButton1;privateJTextFieldjTextField2;privateJTextFieldjTextField1;publicstaticintid;publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){SignUpJFrameinst=newSignUpJFrame();inst.setLocationRelativeTo(null);inst.setVisible(true);}});}publicSignUpJFrame(){super();initGUI();}privatevoidinitGUI(){try{setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);getContentPane().setLayout(null);{jLabel1=newJLabel();getContentPane().add(jLabel1);jLabel1.setText("u8d26u53f7:");jLabel1.setBounds(32,60,34,26);jLabel1.setFont(newjava.awt.Font("微软雅黑",0,14));}{jLabel2=newJLabel();getContentPane().add(jLabel2);jLabel2.setText("u5bc6u7801:");jLabel2.setBounds(32,135,34,23);jLabel2.setFont(newjava.awt.Font("微软雅黑",0,14));}{jTextField1=newJTextField();getContentPane().add(jTextField1);jTextField1.setBounds(78,63,230,24);}{jTextField2=newJTextField();getContentPane().add(jTextField2);jTextField2.setBounds(78,136,230,24);}{jButton1=newJButton();//登录按钮getContentPane().add(jButton1);jButton1.addActionListener(newOkListener());jButton1.setText("u767bu5f55");jButton1.setBounds(152,205,70,33);}pack();setSize(400,300);}catch(Exceptione){e.printStackTrace();}}//登录按钮的监听程序classOkListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){Useru=newUser();UserBObo=newUserBO();id=Integer.parseInt(jTextField1.getText());Stringpassword=jTextField2.getText();try{u=bo.queryUserById(id);//在数据库中查找个人信息if(password.equals(u.getPassword())){//判断密码是否一致ChatClientcc=newChatClient();cc.setVisible(true);}else{newSignFailJFrame().setVisible(true);}}catch(Exceptione1){e1.printStackTrace();}}}}
解决方案
解决方案二:
这么多代码。。。
解决方案三:
引用1楼liutao363071094的回复:
这么多代码。。。
感觉主要都是控件和导包...
解决方案四:
实际这种聊天窗口无非就让你掌握Socket 编程;想通了其实很简单。你先去看看Socket 基础;多看看别人怎么写的;去找个Demo研究下。
解决方案五:
引用3楼liutao363071094的回复:
实际这种聊天窗口无非就让你掌握Socket 编程;想通了其实很简单。你先去看看Socket 基础;多看看别人怎么写的;去找个Demo研究下。
谢谢确实看了可能没看明白吧
解决方案六:
jTextArea1=newJTextArea();//文本显示框看是不是跟jTextArea1.setEditable(false);有关系JTextArea这个显示时要刷新一下
解决方案七:
应该是线程堵塞了,以前谢了一个模仿qq的,有源码,实现了登陆和聊天功能,可以多人聊天,你如果想要代码可以联系我,这里就不发了,太多代码了