| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2089 人关注过本帖
标题:[求助]聊天室程序的问题
取消只看楼主 加入收藏
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 
版主真是, 多谢!!!

2006-06-22 11:44
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 

我想在按下登录按钮时连接(调用函数),怎么实现?


2006-06-22 13:58
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class Chatroom extends JFrame implements ActionListener
{
JPanel pm,pn,ps,pe,pc;
JButton bsend,blogin,bcancel;
JTextArea tac,tae;
JTextField tmessage,tname;
BorderLayout b;
ObjectOutputStream output;
ObjectInputStream input;
Socket server;
String str;
public Chatroom()
{
pm=new JPanel();
pn=new JPanel();
ps=new JPanel();
pe=new JPanel();
pc=new JPanel();
b=new BorderLayout();
pm.setLayout(b);
pm.add(pn,BorderLayout.NORTH);
pm.add(ps,BorderLayout.SOUTH);
pm.add(pe,BorderLayout.EAST);
pm.add(pc,BorderLayout.CENTER);

JLabel lbiaoti=new JLabel("CHAT ROOM");
Color c1=new Color(197,248,184);
pn.setBackground(c1);
Color c2=new Color(246,17,50);
lbiaoti.setForeground(c2);
lbiaoti.setFont(new Font("楷体",Font.PLAIN,36));
pn.add(lbiaoti);

Color c3=new Color(249,170,224);
ps.setBackground(c3);
JLabel lmessage=new JLabel("消息");
ps.add(lmessage);
tmessage=new JTextField(30);
tmessage.addActionListener(this);
ps.add(new JScrollPane(tmessage));
bsend=new JButton("send");
bsend.addActionListener(this);
bsend.setBackground(c3);
ps.add(bsend);

tac=new JTextArea(21,35);
Color c5=new Color(156,236,244);
pc.setBackground(c5);
tac.setEditable(false);
pc.add(new JScrollPane(tac));

tae=new JTextArea(16,13);
pe.setBackground(Color.getHSBColor(218,247,230));
JPanel pe1=new JPanel();
JLabel lname=new JLabel("姓名");
tname=new JTextField(8);
blogin=new JButton("登录");
bcancel=new JButton("退出");
pe.add(new JScrollPane(tae));
blogin.addActionListener(this);
bcancel.addActionListener(this);
pe1.setBackground(Color.getHSBColor(218,247,230));
GridBagLayout gbl=new GridBagLayout();
GridBagConstraints gbc=new GridBagConstraints();
pe1.setLayout(gbl);
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbl.setConstraints(tae,gbc);
pe1.add(tae);
JLabel kongge1=new JLabel(" ");
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbl.setConstraints(kongge1,gbc);
pe1.add(kongge1);
gbc.gridwidth=1;
gbc.anchor=GridBagConstraints.WEST;
gbl.setConstraints(lname,gbc);
pe1.add(lname);
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbl.setConstraints(tname,gbc);
pe1.add(tname);
JLabel kongge2=new JLabel(" ");
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbl.setConstraints(kongge2,gbc);
pe1.add(kongge2);
gbc.gridwidth=1;
gbc.anchor=GridBagConstraints.EAST;
gbl.setConstraints(blogin,gbc);
pe1.add(blogin);
gbc.gridwidth=GridBagConstraints.SOUTHEAST;
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbl.setConstraints(bcancel,gbc);
pe1.add(bcancel);
pe.add(pe1);
this.getContentPane().add(pm);
this.setSize(570,545);
this.setVisible(true);

}
public void actionPerformed(ActionEvent e1)
{
try
{
if(e1.getSource()==bsend)
{
String message=tmessage.getText();
if(message.length()!=0)
{
output.writeObject("Client Say: "+message);
output.flush();
tac.append("\nClient Say: "+message);
tmessage.setText("");
}
else
{
tac.append("Message can not be empty!");
}
}
else if(e1.getSource()==tmessage)
{
output.writeObject("Client Say: "+e1.getActionCommand());
output.flush();
tac.append("\nClient Say: "+e1.getActionCommand());
tmessage.setText("");
}
if(e1.getSource()==blogin)
{
if(tname.getText().length()!=0)
{
tname.setText("");
this.connecttoserver();
this.getstream();
this.clientprocess();
this.close();
}
else
{
tac.append("Name can not be empty!");
}
}
if(e1.getSource()==bcancel)
{
this.close();
}
}
catch(Exception e)
{
tac.append(e.toString());
System.out.println(e.toString());
}
}
public void connecttoserver()throws IOException
{
tac.append("正在建立连接.............\n");
server=new Socket(InetAddress.getByName("USER-3C27D50FFF"),8000);
tac.append("已连接到"+server.getInetAddress().getHostName());
}
public void getstream()throws IOException
{
output=new ObjectOutputStream(server.getOutputStream());
output.flush();
input=new ObjectInputStream(server.getInputStream());
tac.append("\n连接成功");
}
public void clientprocess()throws IOException
{
do
{
try
{
str=(String)input.readObject();
tac.append("\nServer"+str);
}
catch(Exception e2)
{
}
}
while(!str.equals("Server Say: 444"));
}
public void close()throws IOException
{
tac.append("\n正在关闭");
output.close();
input.close();
server.close();
}
public static void main(String args[])
{
Chatroom obj=new Chatroom();
}
}
我写的代码是这样的,当触发按钮时在函数里直接调用。
运行有问题。帮我修改一下代码啊! 谢了!

2006-06-22 17:42
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 

连的不一定是本机,所以我用的是getByName();
大哥们,把我的代码稍修改一下,在你们机上运行一下就知道什么错误了。
服务器正常,也能发消息:
Waiting for Client....
Client 1received from:USER-3C27D50FFF
Got I/O Streams
Server>>>fdgfdg
客户端只要是被别的窗口挡住的地方就什么也没了。
这个问题我都看了好几天了,没找出来原因
望那位大哥别嫌麻烦,把程序运行一下,帮小第一把。


2006-06-22 22:24
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 
用JApplet来写和用JFrame有什么不同? 用哪个好啊?

2006-06-23 10:25
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 
if(e1.getSource()==blogin)
{
if(tname.getText().length()!=0)
{
tname.setText("");
this.connecttoserver();
this.getstream();

this.clientprocess();
this.close();

public void clientprocess()throws IOException
{
do
{
try
{
str=(String)input.readObject();
tac.append("\nServer"+str);
}
catch(Exception e2)
{
}
}
while(!str.equals("Server Say: 444"));
请问这样写对吗?当按下blogin按钮时调用“接受服务器发来的消息”这个函数?
这样写是按下blogin按钮时一直循环接受消息直至正常停止。还是每按一下blogin按钮才接受一次。

2006-06-23 10:33
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 
那我的客户端代码那里错了啊?
版主帮我修改一下代码啊!谢谢了!

2006-06-23 11:27
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 
服务器的代码在1楼的包里 ,代码没问题。
客护端代码在22楼 你把那个名字改成你的计算机名字就可以了啊。要么你改成localhost

2006-06-23 11:42
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 
在按钮触发函数里调用连接函数(连接函数里面是无限循环处理的)这样写我想应该没问题啊
可是有人说我这样写不对 ,不知道是谁错了啊?
版主帮我找一下代码的错误,修改一下代码,我觉得也许这样对我进步更大。

2006-06-23 11:52
guo001
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-3-19
收藏
得分:0 

在按钮触发函数里调用连接函数(连接函数里面是无限循环处理的)这样写我想应该没问题啊
可是有人说我这样写不对 ,不知道是谁错了啊?
版主帮我把代码修改正确啊, 谢谢了!

[此贴子已经被作者于2006-6-23 12:16:04编辑过]


2006-06-23 12:14
快速回复:[求助]聊天室程序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034253 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved