第一个项目,被卡住了.(JAVA聊天程序如何显示上线用户和实现私聊?)

xjl2306 2005-04-26 10:21:19
这是我做的第一个项目,被如何显示上线用户和实现私聊卡住,希望在此得到帮助...
项目:聊天室程序
使用技术:Socket、Thread、IO流、集合类(Set、List、Map)、Swing 注(不使用数据库)
...全文
864 34 打赏 收藏 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
elite19890707 2010-05-29
  • 打赏
  • 举报
回复
代码调试有错误。。不知道怎么该
SnowingXimen 2005-05-13
  • 打赏
  • 举报
回复
这里有人写的JICQ,挺好的,你去看看吧



http://www.csdn.net/cnshare/soft/20/20517.shtm
drugon 2005-05-09
  • 打赏
  • 举报
回复
主要是你人为的控制,你在头脑里面控制好了,做起来就很容易的了。
pengpong 2005-05-09
  • 打赏
  • 举报
回复
好贴
hongyan2004 2005-05-06
  • 打赏
  • 举报
回复
up
acc1982 2005-05-06
  • 打赏
  • 举报
回复
支持xjl2306(JAVA2 新人类) !
接分!!!
ado_jerry 2005-05-06
  • 打赏
  • 举报
回复
UP,学习一下!
liuquanyi 2005-05-06
  • 打赏
  • 举报
回复
学习!
nlstone 2005-05-06
  • 打赏
  • 举报
回复
sorry,原来你的是聊天室程序,不是QQ类的聊天:(
那就更简单了,把我上面的方法稍加变通即可
nlstone 2005-05-06
  • 打赏
  • 举报
回复
没有看你的代码,java我还不太熟,好在你所说的与语言问题无关
你的问题应该是很简单的一类:
1 私聊
2 在线用户

私聊的解决方案很多,在消息中随便加一点标志就可以区分出来
在线用户也很容易解决,随便举个例子,用户自上线连接后,服务器通知该用户的已上线"好友"该用户已上线,且上线用户定时发一个固定消息到服务器,服务器若在指定时间内未收到某个已上线用户的消息,则认定该用户已下线,且通知该用户的好友此人已下线
MARS.nEIL 2005-05-06
  • 打赏
  • 举报
回复
学习.帮顶.
xjl2306 2005-05-05
  • 打赏
  • 举报
回复
那显示在线用户呢?下线又如何处理?
ifsohx 2005-05-04
  • 打赏
  • 举报
回复
不喜欢太多的线程..在公聊和私聊前面加上一些标识(如&,#,...),服务器就可以判断出来你想要公还是私,然后返回给客户端.
xjl2306 2005-05-04
  • 打赏
  • 举报
回复
public void setLMsg() //给信息框赋消息方法
{
String str=null;
try{
str=br.readLine(); //接收服务器消息
jTextArea1.append(str+"\n");
//str=br.readLine();
//jTextArea4.append("\n"+str+"\n");
}
catch(IOException ee){}
}

public void run()
{
while(true)
{
setLMsg(); //接收服务器消息
}
}
public void get()
{
String msg=jTextArea3.getText();
if(msg.equals(""))
{
JOptionPane.showMessageDialog(null,"不能发送空消息!");
jTextArea3.requestFocus();
}
else
{
jTextArea2.append("你对所有人说: "+msg+"\n");
//发送消息至服务器
pw.println("("+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+") "+jTextField1.getText()+"对所有人说:"+" "+msg);
jTextArea3.setText("");
jTextArea3.requestFocus();
}
}

public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jButton1)
{
get();
}
if(e.getSource()==jButton2)
{
pw.println("quit");
try{
pw.close();
br.close();
s.close();
}
catch(IOException ee){}
System.exit(0);
}
}
xjl2306 2005-05-04
  • 打赏
  • 举报
回复
//初始化聊天室
private void jbInit() throws Exception {
getContentPane().setLayout(borderLayout1);
jPanel1.setAlignmentY((float) 1.0);
jPanel1.setOpaque(true);
jPanel1.setPreferredSize(new Dimension(120, 100));
jPanel1.setLayout(borderLayout2);
jPanel2.setBackground(Color.lightGray);
jPanel2.setAlignmentY((float) 1.0);
jPanel2.setOpaque(true);
jPanel2.setPreferredSize(new Dimension(135, 100));
jPanel2.setLayout(borderLayout7);
jPanel3.setBackground(SystemColor.activeCaptionBorder);
jPanel3.setAlignmentY((float) 1.0);
jPanel3.setPreferredSize(new Dimension(200, 200));
jPanel3.setLayout(borderLayout3);
jTextPane1.setBackground(SystemColor.inactiveCaption);
jTextPane1.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jTextPane1.setForeground(SystemColor.info);
jTextPane1.setBorder(BorderFactory.createRaisedBevelBorder());
jTextPane1.setEditable(false);
jTextPane1.setText("主聊天频道");
jPanel5.setBackground(UIManager.getColor("CheckBox.background"));
jPanel5.setPreferredSize(new Dimension(130, 130));
jPanel5.setLayout(borderLayout5);
jTextPane2.setBackground(SystemColor.inactiveCaption);
jTextPane2.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jTextPane2.setForeground(SystemColor.inactiveCaptionText);
jTextPane2.setBorder(BorderFactory.createRaisedBevelBorder());
jTextPane2.setEditable(false);
jTextPane2.setText("我的聊频道");
jPanel7.setLayout(borderLayout6);
jPanel8.setBorder(titledBorder10);
jPanel8.setPreferredSize(new Dimension(35, 35));
jPanel8.setLayout(null);
jRadioButton1.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jRadioButton1.setBorder(titledBorder7);
jRadioButton1.setNextFocusableComponent(jRadioButton2);
jRadioButton1.setSelected(true);
jRadioButton1.setText("公聊");
jRadioButton1.setBounds(new Rectangle(3, 5, 91, 25));
jRadioButton2.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jRadioButton2.setBorder(titledBorder6);
jRadioButton2.setNextFocusableComponent(jComboBox1);
jRadioButton2.setText("私聊");
jRadioButton2.setBounds(new Rectangle(98, 4, 91, 25));
jComboBox1.setFont(new java.awt.Font("新宋体", Font.PLAIN, 13));
jComboBox1.setBorder(BorderFactory.createLoweredBevelBorder());
jComboBox1.setBounds(new Rectangle(194, 7, 95, 21));
jButton1.setBounds(new Rectangle(32, 33, 73, 30));
jButton1.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jButton1.setBorder(BorderFactory.createRaisedBevelBorder());
jButton1.setNextFocusableComponent(jButton2);
jButton1.setText("发送");
jButton2.setBounds(new Rectangle(33, 66, 72, 30));
jButton2.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jButton2.setBorder(BorderFactory.createRaisedBevelBorder());
jButton2.setNextFocusableComponent(jRadioButton1);
jButton2.setText("关闭");
jPanel4.setLayout(null);
jEditorPane1.setBackground(SystemColor.inactiveCaptionBorder);
jEditorPane1.setFont(new java.awt.Font("新宋体", Font.BOLD, 14));
jEditorPane1.setForeground(Color.red);
jEditorPane1.setBorder(BorderFactory.createRaisedBevelBorder());
jEditorPane1.setEditable(false);
jEditorPane1.setText("上线用户");
jPanel9.setLayout(borderLayout8);
jPanel10.setPreferredSize(new Dimension(130, 130));
jPanel10.setLayout(borderLayout9);
jTextPane4.setBackground(SystemColor.inactiveCaptionBorder);
jTextPane4.setFont(new java.awt.Font("新宋体", Font.BOLD, 14));
jTextPane4.setForeground(Color.red);
jTextPane4.setBorder(BorderFactory.createRaisedBevelBorder());
jTextPane4.setEditable(false);
jTextPane4.setText("系统公告");
borderLayout3.setHgap(0);
borderLayout3.setVgap(0);
borderLayout7.setHgap(0);
borderLayout2.setHgap(1);
borderLayout9.setVgap(0);
borderLayout6.setHgap(1);
borderLayout6.setVgap(1);
borderLayout1.setHgap(1);
borderLayout1.setVgap(0);
borderLayout8.setVgap(0);
this.getContentPane().setBackground(SystemColor.control);
jPanel9.setBackground(SystemColor.desktop);
jList1.setBackground(SystemColor.controlHighlight);
jList1.setFont(new java.awt.Font("新宋体", Font.BOLD, 14));
jList1.setForeground(Color.pink);
jList1.setBorder(BorderFactory.createLoweredBevelBorder());
jPanel4.setBorder(null);
jTextArea3.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jTextArea3.setAlignmentX((float) 1.0);
jTextArea3.setAlignmentY((float) 1.0);
jTextArea3.setBorder(BorderFactory.createLoweredBevelBorder());
jTextArea2.setBackground(SystemColor.inactiveCaptionText);
jTextArea2.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jTextArea2.setBorder(BorderFactory.createLoweredBevelBorder());
jTextArea2.setEditable(false);
jTextArea1.setBackground(SystemColor.control);
jTextArea1.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jTextArea1.setBorder(BorderFactory.createLoweredBevelBorder());
jTextArea1.setEditable(false);
jTextArea4.setBackground(SystemColor.inactiveCaptionText);
jTextArea4.setFont(new java.awt.Font("新宋体", Font.PLAIN, 14));
jTextArea4.setForeground(Color.darkGray);
jTextArea4.setBorder(BorderFactory.createLoweredBevelBorder());
jTextArea4.setText("欢迎来到JAVA聊天室");
jTextArea4.setEditable(false);
this.getContentPane().add(jPanel3, java.awt.BorderLayout.CENTER);
jPanel3.add(jTextPane1, java.awt.BorderLayout.NORTH);
jPanel3.add(jPanel5, java.awt.BorderLayout.SOUTH);
this.getContentPane().add(jPanel2, java.awt.BorderLayout.EAST);
this.getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH);
jPanel1.add(jPanel4, java.awt.BorderLayout.EAST);
jPanel4.add(jButton1);
jPanel4.add(jButton2);
jPanel1.add(jPanel7, java.awt.BorderLayout.CENTER);
jPanel8.add(jRadioButton1);
jPanel8.add(jRadioButton2);
jPanel8.add(jComboBox1);
jPanel7.add(jScrollPane4, java.awt.BorderLayout.CENTER);
jScrollPane4.getViewport().add(jTextArea3);
jPanel4.setPreferredSize(new Dimension(135, 100));
buttonGroup1.add(jRadioButton1);
jPanel2.add(jEditorPane1, java.awt.BorderLayout.NORTH);
buttonGroup1.add(jRadioButton2);
jPanel9.add(jPanel10, java.awt.BorderLayout.SOUTH);
jPanel10.add(jTextPane4, java.awt.BorderLayout.NORTH);
jPanel10.add(jScrollPane5, java.awt.BorderLayout.CENTER);
jScrollPane5.getViewport().add(jTextArea4);
jPanel9.add(jList1, java.awt.BorderLayout.CENTER);
jPanel2.add(jPanel9, java.awt.BorderLayout.CENTER);
jPanel5.add(jTextPane2, java.awt.BorderLayout.NORTH);
jPanel5.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jPanel3.add(jScrollPane2, java.awt.BorderLayout.CENTER);
jScrollPane2.getViewport().add(jTextArea1);
jScrollPane1.getViewport().add(jTextArea2);
jPanel7.add(jScrollPane3, java.awt.BorderLayout.EAST);
jPanel7.add(jPanel8, java.awt.BorderLayout.NORTH);
jButton1.addActionListener(this);
jButton2.addActionListener(this);
wyon 2005-05-04
  • 打赏
  • 举报
回复
最简单的办法是在聊天信息前加些标识,由服务器检查你发来的信息以什么开头,判断你是想公聊还是私聊
就跟ifsohx说的差不多
zhaoce 2005-05-02
  • 打赏
  • 举报
回复
这我在大学里做过
太麻烦了
慢慢做
oldmoon 2005-05-02
  • 打赏
  • 举报
回复
等下,老师看了肯定发晕!
oldmoon 2005-05-02
  • 打赏
  • 举报
回复
哥们,你是哪个,在这发?课不是讲完了么?
xjl2306 2005-04-28
  • 打赏
  • 举报
回复
谁有关于显示在线用户的代码,发来看看好吗?
加载更多回复(14)

23,404

社区成员

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

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