java聊天室登陆的问题 谢谢了

b372119132 2014-06-29 05:29:37
我们的大作业是编写一个模拟的聊天室
我在运行服务器后直接运行两次客户端就可以实现互相的通信,但是登录两个不同的账号后能出现客户端界面,但是发送信息时没任何反应,不报错也不抛异常,不知道什么原因,希望能够得到帮助,先谢谢了!
下面贴代码
服务器:ChatServer.java

package com.cy.chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class ChatServer {
public static void main(String[] args) throws Exception {
List sockets = new ArrayList();
ServerSocket ss = new ServerSocket(9010);
while (true) {
Socket s = ss.accept();
sockets.add(s);
Thread t = new ChatThread(s, sockets);
t.start();
}
}
}

class ChatThread extends Thread {
Socket s;
List sockets;

public ChatThread(Socket s, List sockets) {
this.s = s;
this.sockets = sockets;
}


public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(s
.getInputStream()));
while (true) {
String str = in.readLine();
if (str == null)
return;
for (int i = 0; i < sockets.size(); i++) {
Socket s2 = (Socket) sockets.get(i);
PrintWriter out = new PrintWriter(s2.getOutputStream());
out.println(str);
out.flush();
}
}
} catch (IOException e) {
} finally {
sockets.remove(s);
try {
s.close();
} catch (IOException e) {
}
}
}
}

客户端:ChatClient.java

package com.cy.chat;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

import com.cy.sign.SignUpJFrame;
import com.cy.usersql.User;
import com.cy.usersql.UserBO;

public class ChatClient extends javax.swing.JFrame {
private JTextArea jTextArea1;
private JTextField jTextField1;
private JButton jButton1;
BufferedReader in;
PrintWriter out;
Socket s;
String name;

public static void main(String[] args) {

// SwingUtilities.invokeLater(new Runnable() {
// public void run() {

ChatClient inst = new ChatClient();
inst.setVisible(true);
inst.receive();

// }
// });


}

public ChatClient() {
super();
initGUI();
initNet();
}

public void receive() {
try {
while (true) {
String str = in.readLine();
if (str == null)
return;
jTextArea1.append(str + "\n");
}
} catch (IOException e) {
}
}

private void initNet() {
try {
s = new Socket("127.0.0.1", 9010);
out = new PrintWriter(s.getOutputStream());
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (Exception e) {
e.printStackTrace();
}
}

private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
{
User u = new User();
UserBO bo = new UserBO();
jTextArea1 = new JTextArea();//文本显示框
jTextArea1.setEditable(false);
getContentPane().add(jTextArea1);
jTextArea1.setText("你好"+ bo.queryUserById(SignUpJFrame.id).getName() +",欢迎进入聊天室!\n");
jTextArea1.setBounds(0, 0, 384, 224);
}
{
jTextField1 = new JTextField();//文本输入框
getContentPane().add(jTextField1);
jTextField1.setText("");
jTextField1.setBounds(0, 225, 315, 37);
}
{
jButton1 = new JButton();//发送按钮
getContentPane().add(jButton1);
jButton1.setText("\u53d1\u9001");
jButton1.setFont(new java.awt.Font("微软雅黑",0,11));
jButton1.setBounds(314, 225, 70, 37);
jButton1.addActionListener(new OkListener());
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
class OkListener implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
UserBO bo = new UserBO();
User u = new User();
try {
name = bo.queryUserById(SignUpJFrame.id).getName();
} catch (Exception e) {
e.printStackTrace();
}
String text = jTextField1.getText();
jTextField1.setText("");
out.println(name + ":"+ text);
out.flush();


}
}

}

登录:

package com.cy.sign;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

import com.cy.chat.ChatServer;
import com.cy.chat.ChatClient;
import com.cy.usersql.User;
import com.cy.usersql.UserBO;

public class SignUpJFrame extends javax.swing.JFrame {
private JLabel jLabel1;
private JLabel jLabel2;
private JButton jButton1;
private JTextField jTextField2;
private JTextField jTextField1;
public static int id;

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
SignUpJFrame inst = new SignUpJFrame();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}

public SignUpJFrame() {
super();
initGUI();
}

private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
{
jLabel1 = new JLabel();
getContentPane().add(jLabel1);
jLabel1.setText("\u8d26\u53f7:");
jLabel1.setBounds(32, 60, 34, 26);
jLabel1.setFont(new java.awt.Font("微软雅黑",0,14));
}
{
jLabel2 = new JLabel();
getContentPane().add(jLabel2);
jLabel2.setText("\u5bc6\u7801:");
jLabel2.setBounds(32, 135, 34, 23);
jLabel2.setFont(new java.awt.Font("微软雅黑",0,14));
}
{
jTextField1 = new JTextField();
getContentPane().add(jTextField1);
jTextField1.setBounds(78, 63, 230, 24);
}
{
jTextField2 = new JTextField();
getContentPane().add(jTextField2);
jTextField2.setBounds(78, 136, 230, 24);
}
{
jButton1 = new JButton();//登录按钮
getContentPane().add(jButton1);
jButton1.addActionListener(new OkListener());
jButton1.setText("\u767b \u5f55");
jButton1.setBounds(152, 205, 70, 33);
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
//登录按钮的监听程序
class OkListener implements ActionListener{
public void actionPerformed(ActionEvent e){
User u = new User();
UserBO bo = new UserBO();
id = Integer.parseInt(jTextField1.getText());
String password = jTextField2.getText();

try {
u = bo.queryUserById(id);//在数据库中查找个人信息
if(password.equals(u.getPassword())){//判断密码是否一致
ChatClient cc= new ChatClient();
cc.setVisible(true);
}
else{
new SignFailJFrame().setVisible(true);
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}

...全文
243 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zy_think123 2014-07-01
  • 打赏
  • 举报
回复
应该是线程堵塞了,以前谢了一个模仿qq的,有源码,实现了登陆和聊天功能,可以多人聊天,你如果想要代码可以联系我,这里就不发了,太多代码了
文哥xxx 2014-06-29
  • 打赏
  • 举报
回复
jTextArea1 = new JTextArea();//文本显示框 看是不是跟jTextArea1.setEditable(false); 有关系 JTextArea这个显示时要刷新一下
b372119132 2014-06-29
  • 打赏
  • 举报
回复
引用 3 楼 liutao363071094 的回复:
实际这种聊天窗口无非就让你掌握Socket 编程;想通了其实很简单。你先去看看Socket 基础;多看看别人怎么写的;去找个Demo研究下。
谢谢 确实看了 可能没看明白吧
Kiln 2014-06-29
  • 打赏
  • 举报
回复
实际这种聊天窗口无非就让你掌握Socket 编程;想通了其实很简单。你先去看看Socket 基础;多看看别人怎么写的;去找个Demo研究下。
b372119132 2014-06-29
  • 打赏
  • 举报
回复
引用 1 楼 liutao363071094 的回复:
这么多代码。。。
感觉主要都是控件和导包...
Kiln 2014-06-29
  • 打赏
  • 举报
回复
这么多代码。。。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧